我建议不要关闭屏幕旋转,而是处理对话框的配置更改。您可以使用以下两种方法之一:
第一个是在 onSaveInstanceState(outState) 方法中使用标志变量,并恢复对话框 onCreate(bundle) 方法:
在这个例子中,我的标志变量被称为“isShow Dialog”,当android系统首次调用onCreate方法时,捆绑参数将为null,没有任何反应。但是,当通过配置更改(屏幕旋转)重新创建活动时,捆绑包将具有布尔值 isShow Dialog,该值以前由 inSaveInstanceState(...) 方法保存,因此,如果变量变为 true,则再次创建对话框,此处的技巧是在对话框显示时将标志设置为 true,在未显示时设置为 false, 是一个小而简单的技巧。
Class MyClass extends Activity {
Boolean isShowingDialog = false;
AlertDialog myDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
if(savedInstanceState!=null){
isShowingDialog = savedInstanceState.getBoolean("IS_SHOWING_DIALOG", false);
if(isShowingDialog){
createDialog();
}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean("IS_SHOWING_DIALOG", isShowingDialog);
super.onSaveInstanceState(outState);
}
@Override
protected void onPause() {
if(myDialog!=null && myDialog.isShowing()) {
myDialog.dismiss();
}
}
private void createDialog() {
AlertDialog.Builder dialog_builder = new AlertDialog.Builder(this);
dialog_builder.setTitle("Some Title"):
... more dialog settings ...
myDialog = dialog_builder.create();
myDialog.show();
isShowingDialog = true;
}
private void hideDialog(){
myDialog.dismiss();
isShowingDialog = false;
}
}
第二种方法是使用片段组件的功能来保留其状态,主要思想是在片段内创建对话框,在配置更改期间存在分离和重新附加片段的问题(因为您需要关闭并正确显示对话),但解决方案与第一种方法非常相似。此方法的优点是,如果您有一个具有多个配置的 AlertDialog,则在重新创建片段时,无需再次创建和设置对话框,只需使其 show() 并且 AlertDialog 状态由片段维护。
我希望这有帮助。