Android片段保留数据

Zac*_*sky 5 android rotation retain parcelable android-fragments

如何通过像Rotation这样的onCreate/Destroy循环来最好地保留Fragment中的数据?

在我们的设置中,我们有可能从我们的服务器加载到片段自定义列表适配器中的大型列表,我们希望通过不使它们在轮换时重新加载来平滑UX.我们设置片段的问题retainInstance = true; 是我们的适配器具有对原始活动的上下文的引用,因此会泄漏内存.我们可以只将数据存储在片段中并重新创建适配器; 如果那样真的是正确的做法吗?

下一个想法是将数据存储到会话单例对象中并在轮换后检索,这会产生一些陈旧数据的问题但我们可以轻松克服.

我看到的另一种选择,似乎是最好的解决方案,是将数据保存到一个包中并在旋转后恢复到新的片段; 但是,我们有很多对象需要存储在整个应用程序中,而且我们的一些对象很复杂,包含列表,多种类型,并且可能会让人感到痛苦.是否有更好的解决方案,还是我们必须咬紧牙关让它们成为Parcelable?

Chr*_*rry 4

只需防止 Activity 在轮换时重新创建自身(等等)。添加

android:configChanges="keyboardHidden|orientation|screenSize"
Run Code Online (Sandbox Code Playgroud)

到 AndroidManifest.xml 中的 Activity 定义。这样就不需要在轮换时保存任何内容。

编辑:

如果您不喜欢该解决方案,那么您别无选择,只能使用 onSaveInstanceState 机制。如果您有复杂的数据,只需使您的类可序列化并以这种方式将它们添加到捆绑包中即可。

  • 由于 Android 文档和其他地方强烈反对这样做,因此我们不认为这是一个可行的选择。http://developer.android.com/reference/android/app/Activity.html#onRetainNonConfigurationInstance() (3认同)
  • 那么你别无选择,只能使用 onSaveInstanceState 机制。如果您有复杂的数据,只需使您的类可序列化并以这种方式将它们添加到捆绑包中即可。 (2认同)