即使在解除警报对话框后,也会弹出警报对话框

时间:2012-09-15 09:56:59

标签: android popup alertdialog

我遇到了一个典型的问题,这对我来说似乎很奇怪。细节是这样的 - 在我的应用程序中的活动,有edittexts和提交按钮。在edittexts中填充数据后,用户可以单击“提交”按钮。单击提交按钮后,根据用户输入的值,将显示两个警报对话框中的任何一个。一个是成功,另一个是失败。

当用户输入无效数据并单击提交按钮时,将打开失败的警报对话框。我在失败的警告对话框上有一个按钮(确定),点击它后我写了 dialog.dismiss(); 使其消失,以便用户可以重新检查数据并进行修改。但问题是重新检查和如果他更改了方向,则修改数据,然后即使没有单击提交按钮,也会弹出失败的警报对话框。请建议。

额外详细信息(尽管可能不是此问题所必需的):在更改方向时,会重新创建活动。因此,我将当前数据保存在onSavedInstanceState()中并在onCreate()方法中检索它以设置edittexts中的值。一切正常,但一旦点击提交按钮,就会出现相应的警告对话框。然后在更改方向后,对话框再次弹出。我确信我在 onClick()方法中写了 showDialog(1); ,但是又一次为什么控制重新进入onClick并显示警告对话框,即使没有点击也是如此。

protected Dialog onCreateDialog(int id) {
   switch(id){                 
      case 0:          
        return new AlertDialog.Builder(this)
                      .setMessage("Success!") 
                      .setIcon(R.drawable.success)
                      .setPositiveButton("OK",
                      new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();                   
                         }
                      }).show();
       case 1:
           return new AlertDialog.Builder(this)
                      .setMessage("Failed")
                      .setIcon(R.drawable.failure)
                      .setPositiveButton("OK",
                       new DialogInterface.OnClickListener() {

                           @Override
                           public void onClick(DialogInterface dialog, int which) {
                              dialog.dismiss();     
                              return;
                           }
                        }).show();   
           }
           return null;
       }

以下是显示警告对话框的方法。

public void onClick(View v) {
   switch (v.getId()) {    
      //Here there are other cases too.
      case R.id.submit:
        getEditTexts();
        validator();
      break;
   }
}

public void validator() {              
    if(generator.receiveVal(0,0,sudo)) {
       showDialog(0);
     }
    else if(!generator.receiveVal(0,0,sudo)) {
       showDialog(1);
    }
}

2 个答案:

答案 0 :(得分:3)

尝试在.show()的位置替换.create()。在你的情况下像这样:

case 1:
               return new AlertDialog.Builder(this)

               .setMessage("Failed")
               .setIcon(R.drawable.failure)
               .setPositiveButton("OK",
                       new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            dialog.dismiss();

                          return;
                        }
                    }).create();   //Here replaced .show with .create()

答案 1 :(得分:2)

这只是一个想法,但似乎问题是onOrientation正试图重新绘制活动。

尝试以下内容:

您可以将其添加到清单中的活动声明:

android:configChanges="orientation"

所以它看起来像

<activity android:label="@string/app_name" 
    android:configChanges="orientation" 
    android:name=".your.package">

问题是当配置发生变化时,系统会破坏活动。请参阅ConfigurationChanges

因此将其放入配置文件可避免系统破坏您的活动。相反,它会调用onConfigurationChanged(Configuration)方法。

希望这有帮助。