在我的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;
}
}
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对象上的方法。