public class MyDialogFragment extends DialogFragment {
public interface MyDialogFragmentListener {
public void onReturnValue(String foo);
}
public void init(boolean someValue)
{
sSomeValue = someValue;
listeners = new ArrayList<MyDialogFragmentListener>();
}
static boolean sSomeValue;
private static ArrayList<MyDialogFragmentListener> listeners;
public void addMyDialogFragmentListener(MyDialogFragmentListener l)
{
listeners.add(l);
}
public void removeMyDialogFragmentListener(MyDialogFragmentListener l)
{
listeners.remove(l);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.title)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
for (MyDialogFragmentListener listener : listeners) {
listener.onReturnValue("some value");
}
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
// Nothing to do but exit
}
});
if (sSomeValue) {
builder.setMessage(R.string.some_value_message);
} else {
builder.setMessage(R.string.not_some_value_message);
}
// Create the AlertDialog object and return it
return builder.create();
}
}
问题是:当打开对话框时旋转设备并改变方向时,Activity
和MyDialogFragment
对象都将重新创建。为了确保输入值不会搞砸,我将初始化值设置为static
。这对我来说感觉很讨厌,但因为一次只会有一个这样的对话框,我对此很满意。问题出在返回值上。原始侦听器将被调用。这很好,因为对象仍然存在,但是如果需要更新活动
上的UI(确实存在),它将不会得到更新,因为新的活动
实例现在正在控制UI。
我正在考虑的一个解决方案是将dialog类中的getActivity()
强制转换为我的Activity
,并强制对话框本身添加监听器,而不是让调用的Activity
来执行。但这感觉就像黑客滚雪球一样。
优雅地处理这个问题的最佳实践是什么?
您在正确的轨道上,我遵循Android开发人员-使用DialogFragments文章推荐的方法。
创建DialogFragment并定义活动将实现的接口,就像上面所做的那样:
public interface MyDialogFragmentListener {
public void onReturnValue(String foo);
}
然后在DialogFragment中,当您希望将结果返回到活动时,您将活动强制转换到接口:
@Override
public void onClick(DialogInterface dialog, int id) {
MyDialogFragmentListener activity = (MyDialogFragmentListener) getActivity();
activity.onReturnValue("some value");
}
public class MyActivity implements MyDialogFragmentListener {
...
@Override
public void onReturnValue(String foo) {
Log.i("onReturnValue", "Got value " + foo + " back from Dialog!");
}
}
访客详细信息 我在访问者活动中有一个对话框。当我点击图标,它将重定向到相机活动。然后点击Camera Activity中的Confirm按钮,将意图发送回前一个活动,即访客活动。问题是我应该如何将Camera活动的意图结果传递回Visitor活动中的对话框。意图数据应该放在Pass No Edit文本中。我使用的是材料对话框,没有任何附加到该对话框的片段。这一切都放在访客活动中。谁能帮帮我吗?谢谢
如何将数据从活动传递到对话框? 有关更多详细信息,请参阅下图:
目标: 将应用程序脚本函数中的数据返回到自定义电子表格HTML表单中。 问题: 脚本返回“未定义” 应用程序脚本: 电子表格超文本标记语言对话中的脚本:
Unix 至少设立了三层内部边界来防范恶意用户或有缺陷的程序。一层是内存管理:Unix 用硬件自身的内存管理单元(MMU)来保证各自的进程不会侵入到其它进程的内存地址空间。第二层是为多用户设置的真正权限组——普通用户(非 root用户)的进程未经允许,就不能更改或者读取其他用户的文件。第三层是把涉及关键安全性的功能限制在尽可能小的可信代码块上。在 Unix 中,即使是 shell(系统命令解释器)
本文向大家介绍js获取会话框prompt的返回值的方法,包括了js获取会话框prompt的返回值的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js获取会话框prompt的返回值的方法。分享给大家供大家参考。具体分析如下: 获取会话框prompt的返回值,见例子: 注意: prompt返回数据类型是字符串。 alert():无返回值; confirm():返回true 或 false
我有第一活动,它通过意图调用第二活动 在SecondActivity完成后,我希望SecondActivity向FirstActivity发送一些变量。然后调用finsih(),它将返回到第一个活动。如何使SecondActivity发送变量并在FirstActivity中获得结果?