我有一个ArrayListAdapter
。在配置更改时,不会重新创建列表。我想坚持这份清单。我已经使用onSaveInstance()
方法执行此操作,但是我知道这不是存储此类数据的最佳位置。
一个更合适的方法是onRetainNonConfigurationInstance()
,但不推荐使用Fragment中的setRetainInstance()
。我不明白在上述情况下Fragment中的setRetainInstance如何替换onRetainNonConfigurationInstance。
谢谢
最佳答案
我不明白在上述情况下Fragment中的setRetainInstance如何替换onRetainNonConfigurationInstance。
如果您的片段是通过FragmentTransaction
动态添加的,并在该片段上调用setRetainInstance(true)
,则当设备进行配置更改时,Android会保留现有的片段实例,并将其在新创建的活动中重复使用。在所有其他情况下,Android都将丢弃原始片段,并创建一个全新的片段实例以与全新的活动实例一起使用。如果保留了您的片段实例,则将保留其所有数据成员,因此您的ListView
以及配置的ListAdapter
和其他所有内容都将保留。
因此,关键问题是:ArrayList中的数据是否属于数据模型?
如果它是数据模型的一部分,则可能应该将其持久化到某个地方(数据库,JSON文件等),然后可以将其重新加载到全新的片段实例中。
如果它不是您的数据模型的一部分,那么setRetainInstance(true)
或可能的onSaveInstanceState()
将是适当的选项。