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

问题描述 投票:6回答:5

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

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

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

android android-lifecycle android-dialog
5个回答
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;
    }
}

4
投票

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

public boolean isShowing ()

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


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

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

-1
投票

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

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

AlertDialog 一个对话框,可以显示标题,最多三个按钮,可选项列表或自定义布局。 DatePickerDialog或TimePickerDialog具有预定义UI的对话框,允许用户选择日期或时间。

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

© www.soinside.com 2019 - 2024. All rights reserved.