Android 如何检查对话框是否打开?

Android 如何检查对话框是否打开?,android,Android,我有一个创建对话框的静态方法 public static void showDialog(Context context) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Title"); builder.setMessage("Message"); builder.setPositiveButton("ok", new OnClickListe

我有一个创建对话框的静态方法

public static void showDialog(Context context) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Title");
    builder.setMessage("Message");
    builder.setPositiveButton("ok", new OnClickListener() {
            public void onClick(DialogInterface dialog, int arg1) {
                dialog.dismiss();
            }});
    builder.setCancelable(false);
    builder.create().show();
}

在我的应用程序中,可能会出现方法可以多次调用的情况,但我不想打开2个或更多对话框。如何检查对话框是否打开?谢谢…

重写您的方法以返回
AlertDialog
,将其分配给一个成员,并在调用此方法之前检查它是否为null或
!isShowing()


您也可以改用
onCreateDialog
。在基类中为需要对话框管理的活动实现此方法,然后在任何需要的地方调用
showDialog(int-id)

您应该将此代码放在要支持此功能的每个活动中

public AlertDialog myAlertDialog;

public void showDialog(Context context) {
        if( myAlertDialog != null && myAlertDialog.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);
        myAlertDialog = builder.create();
        myAlertDialog.show();
}

此方法不会多次运行同一对话框?如果您不检查
null
isShowing
是否为空,它将尝试多次运行此对话框。如果您将
表示
活动
作为上下文传递,则此方法将不适用于不同的活动。当第二个活动调用此方法时,上下文将过期(第一个
活动
)。@user639183您是对的。最好将其放在activity类中,使其不是静态的。对我来说,这可以工作…在我的应用程序中,只有一个activity可以多次调用此方法。但我不喜欢与静态成员一起工作……这样安全吗?我应该杀死这个成员吗?如果(myAlertDialog==null…为什么我们要检查null?这里应该是!=null…否?0\u 0如果你只有1个活动,为什么要使这个方法是静态的?你应该像
public void showDialog()
一样将
这个
传递给构建器你可以从顶部的函数动态传递title,msg!
            AlertDialog alertDialog;
    alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setTitle(title);
    alertDialog.setMessage(msg);        
    alertDialog.setButton(-3, "Text Parsed", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            dialog.dismiss();
        }
    });

    alertDialog.show();