无法在Android中同时解除2个AlertDialogs

时间:2017-09-10 22:46:43

标签: java android alertdialog

我已经构建了一个Android AlertDialog(命名对话框),如果发生某些情况,它会触发其他Android AlertDialog(名为dialog2)。

我已经检查了如果屏幕上只显示其中一个而没有任何问题就被解雇了。

当它们都显示时出现问题,当我按下第二个对话框的OK按钮时,它就会关闭第二个对话框,尽管第一个对话框甚至显示在屏幕上。

这是与该操作的dialog2相关的代码:

dialog2.setOnShowListener(new DialogInterface.OnShowListener() 
{

   @Override
   public void onShow(final DialogInterface dialog) 
   {

      Button button = ((AlertDialog)               
      dialog).getButton(AlertDialog.BUTTON_POSITIVE);

      button.setOnClickListener(new View.OnClickListener() 
      {

          @Override
          public void onClick(View view) 
          {

              [some more operations]
              dialog2.dismiss();
              dialog.dismiss();

          }
      });
  }

});

最奇怪的是,如果我压制行dialog2.dismiss();只留下dialog.dismiss();被解雇的是第二个对话框,而不是第一个对话框,看起来像是某种方式将android与另一个混淆,我不认为这应该发生,因为它们是这样单独创建的:

dialog=[code to create that dialog]
dialog2=[code to create that dialog]

当我被要求关闭对话框时,我看到该应用程序将关闭dialog2的唯一方法是做dialog = dialog2,我不是。我认为它们应该是在内存中加载的不同对象,每个对象都有其特征。

我没有看到为什么会发生这种情况的任何原因,从我的角度来看似乎是一个毫无头绪的错误。希望你能提出有关正在发生的事情的想法。

1 个答案:

答案 0 :(得分:1)

有几点需要注意:

首先,创建" onShowListener"是必要的,除非您在显示对话框时实际需要执行任务,此代码应该可以帮助您正确创建AlertDialog:

new AlertDialog.Builder(getContext())
                .setTitle(R.id.dialog_title)
                .setMessage(R.id.dialog_message)
                .setPositiveButton(R.id.positive_text, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                     //do onClick stuff here   
                    }
                })
                .show();

此示例一次完成所有设置。如果您需要引用此对话框或不想立即显示,请使用AlertDialog.Builder dialog1 = new ...,然后使用dialog1.show()创建对话框。

第二,当你压制dialog2.dismiss()时只有第二个对话框关闭的原因是因为有一个名为' dialog'的局部变量。在你的onShow()方法内部(查看方法参数),它优先于你更广泛的范围对话框'变量

第三,要回答你的实际问题,你可以在显示第二个对话框之前解雇第一个对话框吗?我没有看到任何同时打开2个对话框的真正理由。