Я не понимаю, как setRetainInstance во Fragment может заменить onRetainNonConfigurationInstance для описанной выше ситуации.
Если ваш фрагмент динамически добавляется через FragmentTransaction
, и вы вызываете setRetainInstance(true)
для этого фрагмента, когда устройство претерпевает изменение конфигурации, Android сохранит существующий экземпляр фрагмента и повторно использует его во вновь созданной активности. Во всех других случаях Android отбрасывает исходный фрагмент и создает новый экземпляр фрагмента, чтобы соответствовать новому экземпляру действия. Если ваш экземпляр фрагмента сохраняется, все его члены данных сохраняются, поэтому ваш ListView
будет сохранен вместе с его сконфигурированным ListAdapter
и всем остальным.
Итак, ключевой вопрос: данные в вашем ArrayList являются частью вашей модели данных или нет?
Если это часть вашей модели данных, вам, вероятно, следует ее где-то сохранить (база данных, файл JSON и т. Д.), А затем просто загрузить ее в новый экземпляр фрагмента.
Если это не является частью вашей модели данных, то setRetainInstance(true)
, или, возможно, onSaveInstanceState()
, будут подходящими вариантами.