2016-02-25 72 views
1

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

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

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

+1

强烈建议您正确保存并保留状态。如果您绕过活动生命周期的过程与您所做的一样简单,那么稍后您可能会在应用中引入其他问题。那么你会希望你第一次做得正确。 –

+0

还有什么其他问题? – Kidades

+0

如果您自行处理配置更改,您将失去轻松完成这些操作(以及更多)的能力:针对横向和纵向使用不同的布局和其他资源,对本地化语言的变化作出响应,对有效更改做出响应屏幕尺寸因为外部显示器(如Chromecast)。如果您说自己想要处理配置更改,则需要绝对确定您的应用需要以对于Android应用不正常的方式行事。不要将其用作避免必须在Android上正确安装应用程序的工作的快捷方式。 –

回答

2

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

+0

添加之后,它仍然表现相同。 – Kidades

+0

但keyboardHidden | orientation | screenSize正常工作! (我有一个物理键盘手机) – Kidades

+0

太棒了!为寻找解决方案的其他人编辑答案。 – jaibatrik

0

在DialogFragment上调用setRetainInstance(true) 也可以在已添加它的活动上覆盖onSavedInstance(Bundle)/OnViewStateRestored(Bundle)

相关问题