Android:旋转更改后的Dialog等恢复

Hen*_*Sou 7 android dialog restore rotation

旋转屏幕后如何恢复对话框等?例如,弹出一个alertDialog来告诉用户一些信息.然后用户将屏幕旋转到另一个方向.如何恢复alertDialog?任何人都可以指导我这样做吗?谢谢!

稍后附上:

我查看了android源代码并找到了这些东西:

对话框存储在mManagedDialogs,相关信息是:

mManagedDialogs = new SparseArray<ManagedDialog>();
Run Code Online (Sandbox Code Playgroud)

onSaveInstanceState 有关:

final void performSaveInstanceState(Bundle outState) {
    onSaveInstanceState(outState);
    saveManagedDialogs(outState);
}
Run Code Online (Sandbox Code Playgroud)

saveManagedDialogs,它有一些关系mManagedDialogs.

onRestoreInstanceState 有关:

final void performRestoreInstanceState(Bundle savedInstanceState) {
    onRestoreInstanceState(savedInstanceState);
    restoreManagedDialogs(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)

restoreManagedDialogs,它有一些关系mManagedDialogs.

如您所见,对于高级功能,您必须自己执行保存和恢复工作.当你有吨定制的对话框时,它可能是一个夜晚的母马.我没有尝试过复杂的对话框(输入EdiText,listView,比如说).这样,我想警告用户:在对话框中输入信息时不要旋转屏幕...或者,在显示对话框时动态锁定旋转.

感谢所有回答我的人.希望我的信息对你也有帮助.

Lan*_*nek 5

只要您使用Activity#showDialog来显示它并使用Activity#onCreateDialog来创建它,它就会为您处理:http: //developer.android.com/reference/android/app/Activity.html#showDialog%28int%29

http://developer.android.com/reference/android/app/Activity.html#onCreateDialog%28int,%20android.os.Bundle%29

  • 在 API 13 中已弃用(“改用 DialogFragment”) (2认同)

Aar*_*n C -18

我采取的方法是不允许操作系统在布局配置更改后重新启动您的活动。为此,请在清单文件中要阻止重新启动的活动中添加以下行:

 <activity
 android:configChanges="orientation|keyboard"
 ...
 >
Run Code Online (Sandbox Code Playgroud)

或者,您可以在代码中处理配置更改,以防您想要手动进行一些布局更改,例如从 XML 重新加载新视图。这是通过覆盖 Activity 类中的 onConfigurationChanged() 方法来完成的:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    //Handle config changes here, paying attention to
    //the newConfig.orientation value
    super.onConfigurationChanged(newConfig);
}
Run Code Online (Sandbox Code Playgroud)

编辑:将“|键盘”添加到配置更改列表中

  • 有效但不推荐。 (15认同)