在恢复活动时阻止多次打开对话框

时间:2011-11-15 10:53:45

标签: android android-lifecycle android-dialog

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

问题是,如果我在没有回答对话的情况下恢复此活动的次数,那么我会在对方之上得到几个对话框,这显然不是我的目标。

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

7 个答案:

答案 0 :(得分:6)

你可以使用单身模式,大致可以这样:

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;
    }
}

答案 1 :(得分:4)

而不是做黑客或使用布尔值,你可以使用the method given by google itself

public boolean isShowing ()

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

答案 2 :(得分:3)

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 :(得分:0)

使用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)
    }

答案 4 :(得分:0)

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

事实证明,我删除了super.onDismiss(dialog),因此,对话框是重复的

重新添加,错误消失。

我希望有人能帮忙

答案 5 :(得分:0)

检查对话框是否已显示

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();
}

答案 6 :(得分:-1)

我建议您使用AlertDialog并使用DialogFragment作为谷歌团队的建议。 [Dialog开发者指南] [1]

  

Dialog类是对话框的基类,但您应该避免直接实例化Dialog 。而是使用以下子类之一:

     

AlertDialog
  一个对话框,可以显示标题,最多三个按钮,可选项列表或自定义布局。   

  DatePickerDialog或TimePickerDialog   带有预定义UI的对话框,允许用户选择日期或时间。

     

这些类定义对话框的样式和结构,但您应该使用DialogFragment作为对话框的容器。 DialogFragment类提供了创建对话框并管理其外观所需的所有控件,而不是在Dialog对象上调用方法。