在方向更改时保留 DialogFragment 状态

Retain DialogFragment state on orientation change

我有一个 DialogFragment,它从文件加载信息并在屏幕上创建一定数量的 EditText 字段(最少可以有 5-6 个,也可以有几十个)。从文件加载时,它们都有一个初始值。
用户还可以通过按下按钮来添加其他文本字段。这些文本字段可以添加到现有字段之间的多个位置。一切都以编程方式添加。
当方向发生变化时,所有这些都会丢失。有没有办法防止这种情况发生?不是通过保存信息然后恢复它,而是简单地防止它发生?

创建对话框时的字段数取决于将从文件中加载的信息。发生方向变化时的字段数不必相同。用户可以通过按下添加新字段的多个按钮中的一个按钮来添加新字段。该对话框可以同时包含 30 多个字段。保存状态然后恢复它可能需要一个复杂的方法(可能类似于将视图保存在静态列表中,或者可能是整个布局)。在对话框打开时完全防止方向改变可能是最好的选择,或者可能强制它横向显示,因为用户需要输入很多内容...

有没有更简单的方法解决这个问题?

是的,您可以将属性 android:configChanges="orientation|screenSize|keyboard|keyboardHidden" 添加到 AndroidManifest.xml 文件中的 Activity 声明。

在 DialogFragment 上调用 setRetainInstance(true) 还要覆盖 onSavedInstance(Bundle)/OnViewStateRestored(Bundle) 上的 Activity,您已将其添加到其中。