android - 使用 setRetainInstance 在 configurationChanges 中保留 ListAdapter 中的列表项

标签 android listview android-fragments android-arrayadapter

我有一个ArrayListAdapter。配置更改时,不会重新创建列表。我想保留 list 。我已经使用 onSaveInstance() 方法来执行此操作,但我知道这不是存储此类数据的最佳位置。

更合适的方法是 onRetainNonConfigurationInstance(),但它已被弃用,取而代之的是 fragment 中的 setRetainInstance()。对于上述情况,我不明白 Fragment 中的 setRetainInstance 如何替换 onRetainNonConfigurationInstance。

谢谢

最佳答案

I don't understand how the setRetainInstance in Fragment could replace onRetainNonConfigurationInstance for the above situation.

如果您的 fragment 是通过 FragmentTransaction 动态添加的,并且您对该 fragment 调用了 setRetainInstance(true),当设备进行配置更改时,Android 将保留现有 fragment 实例并在新创建的 Activity 中重用它。在所有其他情况下,Android 将丢弃原始 fragment 并创建一个全新的 fragment 实例以与全新的 Activity 实例一起使用。如果你的 fragment 实例被保留,它的所有数据成员都会被保留,所以你的 ListView 将被保留,连同它配置的 ListAdapter 和其他一切。

因此,关键问题是:您的 ArrayList 中的数据是否属于您的数据模型?

如果它是您的数据模型的一部分,您可能应该将它保存在某个地方(数据库、JSON 文件等),然后您可以简单地将它重新加载到全新的 fragment 实例中。

如果它不是您的数据模型的一部分,那么 setRetainInstance(true) 或可能的 onSaveInstanceState() 将是合适的选项。

关于android - 使用 setRetainInstance 在 configurationChanges 中保留 ListAdapter 中的列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9735514/

相关文章:

Android - 带复选框的 ListView

html - 在 JQuery Mobile ListView 中停止预选(突出显示)元素

java - 如何从 Android 中的父 Activity 调用 Fragment 方法

java - 如何为 fragment 设置列表适配器

android - 隐藏导航栏而不在android上生根

android - 多屏幕支持完整性检查

java - Android ListView 填充内容而不移动 ListView 高度?

android - 删除页面后 ViewPager 显示错误内容

android - 按下 "Run"时如何防止Android Studio打开LogCat(选项卡)?

android - 向 WheelView 添加标题