我有一个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/