在我的Android应用程序中,为了询问用户他/她是否想要恢复当前游戏,我会在主游戏活动中显示一个对话框,说“你想恢复当前游戏吗?是 - 否”。 / p>
问题是,如果我在没有回答对话的情况下恢复此活动的次数,那么我会在对方之上得到几个对话框,这显然不是我的目标。
我可以使用布尔值var轻松避免这种行为,但我想知道Dialog类是否有一种防止重复或类似的选项。
答案 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)
答案 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对象上调用方法。