我遇到了一个典型的问题,这对我来说似乎很奇怪。细节是这样的 - 在我的应用程序中的活动,有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);
}
}
答案 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)
方法。
希望这有帮助。