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

一个更合适的方法是onRetainNonConfigurationInstance(),但不推荐使用Fragment中的setRetainInstance()。我不明白在上述情况下Fragment中的setRetainInstance如何替换onRetainNonConfigurationInstance。

谢谢

最佳答案

我不明白在上述情况下Fragment中的setRetainInstance如何替换onRetainNonConfigurationInstance。


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

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

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

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

10-08 17:47