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

时间:2012-03-16 10:22:51

标签: android listview android-fragments android-arrayadapter

我有ArrayListAdapter。在配置更改时,不会重新创建列表。我想坚持这份名单。我使用onSaveInstance()方法来执行此操作,但我知道它不是存储此类数据的最佳位置。

更合适的方法是onRetainNonConfigurationInstance(),但在片段中已弃用setRetainInstance()。我不明白片段中的setRetainInstance如何替换onRetainNonConfigurationInstance以解决上述情况。

由于

1 个答案:

答案 0 :(得分:3)

  

我不明白Fragment中的setRetainInstance如何替换onRetainNonConfigurationInstance以解决上述情况。

如果您的片段是通过FragmentTransaction动态添加的,并且您在该片段上调用setRetainInstance(true),那么当设备进行配置更改时,Android将保留现有的片段实例并在新的 - 创造活动。在所有其他情况下,Android将丢弃原始片段并创建一个全新的片段实例以与全新的活动实例一起使用。如果您的片段实例被保留,则会保留其所有数据成员,因此将保留ListView及其配置的ListAdapter和其他所有内容。

因此,关键问题是:数据模型中ArrayList部分的数据是否是?

如果它是您的数据模型的一部分,您可能应该将其持久化(数据库,JSON文件等),然后您可以在全新的片段实例中重新加载它。

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