我的Android应用程序在按钮单击时显示AlertDialog。当我多次单击该按钮时,会创建多个对话框。我怎样才能解决这个问题?
这是我的代码:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog = new AlertDialog.Builder(context);
dialog.show();
}
});
如果显示对话框,您可以创建一个设置为true的全局标志(布尔值)吗?如果用户单击“确定”,“是”,“否”或任何对话框已关闭,则将标志设置为false。
所以类似于:
boolean dialogShown;
If(dialogShown)
{
return;
}
else
{
dialogShown = true;
dialog = new AlertDialog.Builder(context);
dialog.show();
}
你需要检查对话框是否显示
Dialog有一个isShowing()方法,如果对话框当前可见,则该方法应该返回。
public AlertDialog myDialog;
public void showDialog(Context context) {
if( myDialog != null && myDialog.isShowing() ) return;
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Title");
builder.setMessage("Message");
builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int arg1) {
dialog.dismiss();
}});
builder.setCancelable(false);
myDialog = builder.create();
myDialog.show();
}
为它创建一个正面或负面的按钮,只需将其称为“正常”并使用它来消除。就像是 :
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Look at this dialog!")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//do things
}
});
AlertDialog alert = builder.create();
alert.show();
每次按下按钮都可以调用方法。所以这就是多次出现的原因。
最简单的方法是在代码类中定义一个实例变量,如:
boolean alertIsBeingShown = false;
然后在显示警报时将其设置为true
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (alertIsBeingShown) return;
alertIsBeingShown = true;
dialog = new AlertDialog.Builder(context);
dialog.show();
}
});
并在您按下确定以使其消失的代码中将变量设置为false。
当我遇到这个问题时,我无法使用Flags。我必须在RecyclerView中显示一个单击列表项的对话框。
在onclick方法中,我为对话框创建了一个变量,然后在构建对话框时,我用if语句将其括起来,检查AlertDialog变量是否为null。当用户第一次出现对话框时单击列表项时,因为该变量为null,即使用户单击两次项目,也只会出现一个对话框,因为在第二次单击后,AlertDialog变量不再为null。当用户解除AlertDialog时,该变量再次设置为null。
AlertDialog alertDialog;
if(alertDialog == null) {
alertDialog = new AlertDialog.Builder(MyActivity.this)
.setTitle("Title for Dialog")
.setMessage("Dialog Message")
.setPositiveButton("Okay", null)
.setNegativeButton("No", null)
.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
alertDialog = null;
}
})
.show();
}
在try-catch-block中创建对话框,如下所示:
try {
dialog.setVisible(true);
} catch (NullPointerException e) {
dialog = new AlertDialog.Builder(context);
dialog.show();
}
第一次执行此操作时,将抛出NullPointerException并创建对话框。以下时间没有任何可见的确实会发生。