AlertDialog在彼此之上显示多个Dialogs?

时间:2016-05-10 00:33:13

标签: android dialog gps alertdialog

我的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();
        }

2 个答案:

答案 0 :(得分:0)

gem help install作为Activity类的全局变量
然后在alertDialog中,您可以检查是否显示提醒。

showSettingsAlert()

希望这个帮助

答案 1 :(得分:0)

我认为PhanVănLinh提供的解决方案是关键,只需要稍加修改。

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

    私人AlertDialog.Builder _alertDialog = null;

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

  • 然后像这样制作showSettingDialgo:

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

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

  • 最后当对话框被解除时,再次将实例设为null。

    _alertDialog = null;