2

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

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

额外细节(虽然这个问题可能不是必需的):在改变方向时重新创建活动。因此,我将当前数据保存在 onSavedInstanceState() 中并在 onCreate() 方法中检索它以设置编辑文本中的值。一切正常,但是一旦单击提交按钮,就会出现相应的警报对话框。然后在改变方向后,对话框再次弹出。我确定我写了showDialog(1); onClick()方法中,但又为什么控制会回到 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);
    }
}
4

2 回答 2

3

只需尝试将 .create() 替换为 .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;
                        }
                    }).create();   //Here replaced .show with .create()
于 2012-09-17T04:48:56.607 回答
2

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

尝试以下操作:

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

android:configChanges="orientation"

所以看起来像

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

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

所以把它放在配置文件中可以避免系统破坏你的活动。相反,它调用该onConfigurationChanged(Configuration)方法。

希望这可以帮助。

于 2012-09-15T10:13:32.747 回答