Google决定制作一个没有模态对话框的单线程用户界面。我相信你们大多数人都发现在你的函数返回之前没有任何更新,因为一切都是在一个线程上由事件驱动的(通过" law")。
如果我有一个简单的警报框,例如"你确定吗?" (仅限示例),使用“是”和“否”按钮,然后我必须为按钮分配回调,而不是使用简单的返回值(没有模态对话框)。这很好,即使返回值会大大简化我的问题(参数保持在调用者本地),尽管这会阻止调用活动响应(模态)。
现在想象一下,如果我有一个项目列表,并且用户尝试执行某些操作。该对话框现在必须有一些方法可以将我想要执行操作的WHICH项目传递给按钮的回调,但我似乎无法找到API中的任何机制将其传递给onclick处理程序。使用非局部变量是一种解决方法,但很麻烦。
如何干净地传递这些信息?有没有人会有某种形式的黑客攻击"假的"一个可以返回值的模态对话框(我没看到如何)。
答案 0 :(得分:3)
创建一个自定义对话框,扩展默认的android对话框并添加所需的信息并传递构造函数。 点击此处:How can I pass values between a Dialog and an Activity?
答案 1 :(得分:0)
我不确定你想要实现什么目标。不确定您的问题是在对话活动或活动对话或两者之间的沟通中。
无论如何,我在Android上有一些经验,我真的建议你实现活动,片段甚至对话框(DialogFragments)之间的通信,以使用其中一个库。在开始时可能会有点难以理解如何工作,但结果是更快更清洁的代码,当然会为您提供更大的灵活性。
看看:
https://regex101.com/r/uE3cC4/29 - >使用较少但很棒
https://github.com/beworker/tinybus - >更多扩展和用于社区
希望能帮到你!
答案 2 :(得分:0)
在这种情况下,我在values.xml中的values.xml中创建了一个新的字符串数组条目,如下所示:
<string-array name="array">
<item>1</item>
<item>2</item>
</string-array>
然后使用Dialog构建器创建一个对话框,如下所示:
AlertDialog.Builder dialog=new AlertDialog.Builder(this);
LayoutInflater infl=this.getLayoutInflater();
Resources res=getResources();
dialog.setSingleChoiceItems(R.array.alphabets, 0,new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mReturnVariable=which;
}
});
dialog.create().show();
因此mReturnVariable包含用户选择的项目索引.Hope解决问题