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

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

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

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

你可以使用单例模式,可以大致如下:

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

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

 public boolean isShowing () 

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

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

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

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

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

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

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

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