【问题标题】:How to make android dialog modal?如何使android对话框模态?
【发布时间】:2011-12-05 08:38:05
【问题描述】:

我这样实现了这个自定义的 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() 之后,无需等待用户使用任何对话框按钮关闭对话框。

这种行为看起来很奇怪,我原以为对话框是模态的,就像我一直知道的模态对话框一样。

我可以重组我的代码,以便从对话框按钮的onClickListener 调用doProcessUserInput()。然而,我想知道是否有办法在 dialog.show() 处暂停程序执行,直到对话框结束。

PS:

  1. 我尝试使用扩展 Dialog 的自定义对话框,但它具有 同样的问题。我正在按钮的 onClickListener
  2. 我已经尝试实现Activity::onCreateDialog 并使用showDialog(id) 而不是dialog.show(),但这有同样的问题。

【问题讨论】:

    标签: android dialog modal-dialog


    【解决方案1】:

    当然,您可以为您的对话框设置onPositiveButton 点击侦听器,然后从该侦听器执行您的操作。

    如果您确实想在某个时间点暂停您的活动,您可能可以使用旧的 java wait/notify 机制或更方便的新机制,例如执行器。

    虽然尚不清楚,但您为什么要这样做。 Android 对话框专门设计为非模态对话框,因此它们绝不会阻止您的应用程序(因为您的应用程序可以包含其他活动,例如本机电话呼叫活动,如果这些活动被阻止,那就不好了)。

    【讨论】:

    • 嗯...现在说得通了。没想到这个角度。来自一生桌面编程的蜘蛛网。
    【解决方案2】:

    这对我有用:创建一个 Activity 作为您的对话框。那么,

    1. 将此添加到您的活动清单中:

      android:theme="@android:style/Theme.Dialog"

    2. 将此添加到您的活动的 onCreate

      setFinishOnTouchOutside (false);

    3. 在您的活动中覆盖 onBackPressed:

      @覆盖 公共无效 onBackPressed() { // 防止“返回”离开这个活动 }

    第一个为活动提供对话框外观。后两者使其表现得像一个模态对话框。

    【讨论】:

    • 我到处寻找这一简单的行 setFinishOnTouchOutside (false);谢谢!覆盖 onBackPressed() 也很完美!
    【解决方案3】:

    在调用对话框的 show() 方法之前,请尝试调用 .setCancelable(false)。这对我来说非常有效。

    【讨论】:

      【解决方案4】:

      此外,您不应在对话框中阻止应用程序流。

      Android 开发指南和社区最佳实践指出,如果您想要某种模式,您必须onClickListeners 中进行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        相关资源
        最近更新 更多