我实现了这样的自定义AlertDialog:
AlertDialog dialog = new AlertDialog.Builder(this)
.setView(dialogView)
.setTitle(getResources().getString(R.string.addedit_asklater_price))
.setCancelable(false)
.create();
dialog.setMessage(text);
dialog.setOwnerActivity(this);
dialog.setButton(...)
dialog.setButton(...)
dialog.show();
doProcessUserInput();
但是,我注意到dialog.show()
控件立即流向doProcessUserInput()
后没有等待用户使用任何对话框按钮关闭对话框。
这种行为似乎很奇怪,我期待对话框是模态的,就像我一直都知道的模态对话框一样。
我可以重构我的代码,以便从对话框按钮doProcessUserInput()
调用onClickListener
。然而,我想知道是否有办法在dialog.show()
暂停程序执行,直到对话框完成。
PS:
onClickListener
。 Activity::onCreateDialog
并使用showDialog(id)
代替dialog.show()
,但这也有同样的问题。答案 0 :(得分:4)
当然,您可以为对话设置onPositiveButton
点击监听器,并从该监听器执行操作。
如果你确实想在某个时刻暂停你的活动,你可能会使用旧的java wait/notify
机制或更方便的新机制,如执行者。
为什么你想这样做虽然不清楚。 Android对话框专门设计为非模态的,因此它们不会阻止您的应用程序(因为您的应用程序可以包含其他活动,例如本机电话呼叫活动,如果这些活动被阻止则会很糟糕。)
答案 1 :(得分:4)
这对我有用:创建一个Activity作为对话框。然后,
将此添加到活动的清单中:
机器人:主题= “@机器人:风格/ Theme.Dialog”
将此添加到活动的onCreate
setFinishOnTouchOutside(false);
在您的活动中覆盖onBackPressed:
@覆盖 public void onBackPressed() { //阻止“退回”离开此活动 }
第一个给对话框看的活动。后两者使其表现得像一个模态对话框。
答案 2 :(得分:2)
此外,您不应在对话框中阻止应用程序流。
Android开发指南和社区最佳做法指出,如果您需要某种模态,必须>>在onClickListener
中执行此操作。
答案 3 :(得分:1)
在调用show show()方法之前,请尝试调用 .setCancelable(false)。这对我很有用。