AlertDialog显示多个对话框重叠在一起?

3

我在我的GPSTracker类中有这个方法:

public void showSettingsAlert() {
    final AlertDialog.Builder alertDialog = new AlertDialog.Builder(myContext);

    // Setting Dialog Title
    alertDialog.setTitle("GPS Settings");

    // Setting Dialog Message
    alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");

    // Setting Icon to Dialog
    // alertDialog.setIcon(R.drawable.delete);

    // On pressing Settings button
    alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            final Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            myContext.startActivity(intent);
        }
    });

    // on pressing cancel button
    alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });

    alertDialog.show();
}

我运行它时,会同时弹出10个对话框,基本上我需要按下10次取消或类似的操作,该怎么解决? 我读到了关于

final AlertDialog alert = alertDialog.create();
if(alert.isShowing()) {
alert.dismiss();
}
else {
alert.show();
}

但这对我没有用,我仍然会得到多个对话框叠在一起...有人能帮帮我吗?基本上我在我的活动中调用if(gps.isEnabled()) gps.showSettingsAlert();

if (itemsArrayList.get(position).getCoordinates() == null || !gps.canGetLocation()) {
            holder.distance.setText("Distance not available");
            gps.showSettingsAlert();
        }

请发布更多的代码。你目前发布的代码没有问题,所以问题可能出在其他地方。如果你发布更多的代码,将有助于其他人更容易地识别问题所在。 - A. Vin
请在调用showSettingsAlert的代码处发布。 - Atiq
我添加了调用showSettingsAlert的代码。 - HappyR
2个回答

0

我认为Phan Văn Linh提供的解决方案是关键,只需要进行一些小修改。

  • 首先,将alertDialog作为您的活动或应用程序(取决于您)的全局变量,并将其初始化为null。

    private AlertDialog.Builder _alertDialog = null;

null初始化将帮助您检查是否创建了alertDialog的实例。

  • 然后像这样制作showSettingDialgo:

    public void showSettingsAlert() { if( _alertDialog != null){//在这里我们检查是否显示了一个实例 return; }

    _alertDialog = new AlertDialog.Builder(myContext); // 设置对话框标题 ... _alertDialog.show(); }

  • 最后,在对话框关闭时再次将实例设置为null。

    _alertDialog = null;


我无法让它正常工作,它仍然在其他对话框之上显示很多对话框。 我的公共类 GpsTracker 扩展了 Service 并实现了 LocationListener 接口。其中我的 showSettingsAlert 方法就在里面,然后我得到了我的 ListAdapter,在那里我需要显示 GPS... - HappyR
你能展示更多关于你的GPSTracker以及如何使用它的代码吗? - MRKT

-1

alertDialog作为您的Activity类的全局变量
然后在showSettingsAlert()中,您可以检查警报是否正在显示。

private AlertDialog alertDialog;
...
public void showSettingsAlert() {
    if( alertDialog != null && alertDialog.isShowing() ){
       return;
    }

    AlertDialog.Builder builder = new AlertDialog.Builder(context);    
    // Setting Dialog
    //builder.setTitle(...)
    //builder.setMessage...
    //builder.setPositiveButton...
    //builder.setNegativeButton...   
    ...
    alertDialog= builder.create();
    alertDialog.show();
}

希望这可以帮到你。

AlertDialog.Builder没有提供isShowing()方法 :( - HappyR
@HappyR,你说得对,是我的错。我已经更新了我的答案,请检查一下。 - Linh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接