在我的 Android 应用程序中,为了询问用户他/她是否想恢复当前游戏,我会在主游戏活动上显示一个对话框,说“你想恢复当前游戏吗?是 - 否”。
问题是,如果我在不回答对话的情况下多次恢复此活动,那么我会得到几个对话,彼此叠加,这显然不是我的目标。
我可以使用布尔变量轻松避免这种行为,但我想知道 Dialog 类是否有一种防止被复制的选项或类似的东西。
在我的 Android 应用程序中,为了询问用户他/她是否想恢复当前游戏,我会在主游戏活动上显示一个对话框,说“你想恢复当前游戏吗?是 - 否”。
问题是,如果我在不回答对话的情况下多次恢复此活动,那么我会得到几个对话,彼此叠加,这显然不是我的目标。
我可以使用布尔变量轻松避免这种行为,但我想知道 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;
}
}
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();
}
当我尝试在没有的情况下覆盖该onDismiss()
方法时,我也遇到了这样的问题super.onDismiss(dialog);
事实证明我删除super.onDismiss(dialog)
了,因此,对话框被重复了
回来补充,错误消失了。
我希望有人会帮助
使用 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)
}
检查对话框是否已显示
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();
}