10

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

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

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

4

6 回答 6

8

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

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;
    }
}
于 2011-11-15T11:03:44.433 回答
5
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();
}
于 2016-12-22T01:57:46.187 回答
4

而不是做黑客或使用布尔值,你可以使用谷歌本身给出的方法

public boolean isShowing ()

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

于 2015-04-08T18:14:06.533 回答
2

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

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

回来补充,错误消失了。

我希望有人会帮助

于 2019-07-15T13:04:07.160 回答
0

使用 isAdded() 方法,

科特林示例:

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

在片段或活动中的某处

private fun dialogShow(dialog: DialogFragment?) {
        val fragmentManager: FragmentManager = (context as MyActivity).fragmentManager
        dialog?.show( fragmentManager,TAG)
    }
于 2018-05-31T12:02:39.100 回答
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();
}
于 2020-12-07T07:18:56.970 回答