【问题标题】:Prevent dialog to be opened multiple times when resuming activity恢复活动时防止对话框多次打开
【发布时间】:2011-11-15 10:53:44
【问题描述】:

在我的 Android 应用程序中,为了询问用户他/她是否想恢复当前游戏,我会在主游戏活动上显示一个对话框,说“你想恢复当前游戏吗?是 - 否”。

问题是,如果我在不回答对话的情况下多次恢复此活动,那么我会得到几个对话,彼此叠加,这显然不是我的目标。

我可以使用布尔变量轻松避免这种行为,但我想知道 Dialog 类是否有一种防止重复的选项或类似的东西。

【问题讨论】:

  • 你可以试试 dialog.isShowing()
  • 当您退出应用程序并再次打开时,活动会重新启动,并且我认为,由于您的代码形成,对话框会再次重新启动,但之前可能从未关闭过..也许如果您放 onPause( ){ Dialog.dismiss();} 它可以帮助您解决问题
  • isFinishing() ?

标签: android android-lifecycle android-dialog


【解决方案1】:

你可以使用单例模式,大概是这样的:

Dialog myDialog = null;


public void showDialog() {
    if(myDialog == null) {
        /* show your dialog here... */
        myDialog = ...
    }
}


public void hideDialog() {
    if(myDialog != null) {
        /* hide your dialog here... */
        myDialog = null;
    }
}

【讨论】:

  • 嗨 Sam 我面临同样的问题,但我正在使用 alertdialogbuilder 创建对话框,任何解决方案..??
【解决方案2】:
private Dialog mDialog;

private void showDialog(String title, String message) {
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this)
            .setTitle(title)
            .setMessage(message);

    // Dismiss any old dialog.
    if (mDialog != null) {
        mDialog.dismiss();
    }

    // Show the new dialog.
    mDialog = dialogBuilder.show();
}

【讨论】:

    【解决方案3】:

    您可以使用the method given by google itself而不是进行黑客攻击或使用布尔值

    public boolean isShowing ()
    

    它返回一个布尔值 对话框当前是否正在显示。

    【讨论】:

      【解决方案4】:

      我在没有super.onDismiss(dialog);的情况下尝试覆盖onDismiss()方法时也遇到了这样的问题

      原来我删除了super.onDismiss(dialog),因此,对话框被重复了

      返回添加,错误消失。

      希望有人帮忙

      【讨论】:

        【解决方案5】:

        使用 isAdded() 方法,

        Kotlin 示例:

        view.button.setOnClickListener({
                    if (!dialog.isAdded) {
                        dialogShow(dialog)
                    }
                })
        

        在片段或活动中的某处

        private fun dialogShow(dialog: DialogFragment?) {
                val fragmentManager: FragmentManager = (context as MyActivity).fragmentManager
                dialog?.show( fragmentManager,TAG)
            }
        

        【讨论】:

          【解决方案6】:

          检查对话框是否已经显示

          private Dialog mDialog;
          
          private void showDialog(String title, String message) {
              //stop multiple dialog window
              if(dialog != null && dialog.isShowing()) {
                  return;
              }
              
              AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this)
                      .setTitle(title)
                      .setMessage(message);
          
              dialog = dialogBuilder.show();
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多