在Android应用程序中我有一个警告对话框,在旋转屏幕时它被解雇了,我发现堆栈溢出的许多解决方案与此类似,但不适用于我的问题......
这是我的警报对话编码...
private void callchangepswd() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
alertDialog.setCancelable(true);
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.changepassword, null, false);
EditText cemail = (EditText) view.findViewById(R.id.chagepswd_mail);
EditText cphone = (EditText) view.findViewById(R.id.chagepswd_phone);
Button verify=(Button)view.findViewById(R.id.verifybtn);
alertDialog.setView(view);
final AlertDialog dialogShow = alertDialog.create();
dialogShow.show();
verify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialogShow.dismiss();
newpassword();
}
});
}
任何人都可以帮助从这个出来......
答案 0 :(得分:1)
旋转屏幕时,Activity
将被销毁并重新创建。这就是你Dialog
消失的原因。
为了处理这种情况,您可以覆盖onSaveInstanceState
,在捆绑中保留boolean
,告诉您对话框是否显示。您还应该保留用户输入(电话和电子邮件)。
并且onRestoreInstanceState
您需要重新创建对话框并使用用户输入填充字段。您可以阅读有关活动生命周期here
答案 1 :(得分:0)
您必须使用DialogFragment而不是AlertDialog,如https://developer.android.com/guide/topics/ui/dialogs.html中所述,DialogFragment将在方向更改期间存活
答案 2 :(得分:0)
无需使用SaveInstanceState
。您可以在设备轮换后通过将orientation|screenSize
添加到android:configChanges
activity
的{{1}}属性来保存您的活动状态(包括对话框)
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
正如@greenapps在评论中正确指出的那样,您应该将android:configChanges="orientation|screenSize"
添加到您调用对话框的每个活动中。