Сохранение элементов списка в ListAdapter в ConfigurationChanges с помощью setRetainInstance - PullRequest
1 голос
/ 16 марта 2012

У меня есть ArrayListAdapter. При изменении конфигурации список не воссоздается. Я хотел бы сохранить список. Для этого я использовал метод onSaveInstance(), но я знаю, что это не лучшее место для хранения данных такого типа.

Более подходящим методом будет onRetainNonConfigurationInstance(), но он не рекомендуется в пользу setRetainInstance() во фрагменте. Я не понимаю, как setRetainInstance во Fragment может заменить onRetainNonConfigurationInstance для вышеуказанной ситуации.

Спасибо

1 Ответ

3 голосов
/ 16 марта 2012

Я не понимаю, как setRetainInstance во Fragment может заменить onRetainNonConfigurationInstance для описанной выше ситуации.

Если ваш фрагмент динамически добавляется через FragmentTransaction, и вы вызываете setRetainInstance(true) для этого фрагмента, когда устройство претерпевает изменение конфигурации, Android сохранит существующий экземпляр фрагмента и повторно использует его во вновь созданной активности. Во всех других случаях Android отбрасывает исходный фрагмент и создает новый экземпляр фрагмента, чтобы соответствовать новому экземпляру действия. Если ваш экземпляр фрагмента сохраняется, все его члены данных сохраняются, поэтому ваш ListView будет сохранен вместе с его сконфигурированным ListAdapter и всем остальным.

Итак, ключевой вопрос: данные в вашем ArrayList являются частью вашей модели данных или нет?

Если это часть вашей модели данных, вам, вероятно, следует ее где-то сохранить (база данных, файл JSON и т. Д.), А затем просто загрузить ее в новый экземпляр фрагмента.

Если это не является частью вашей модели данных, то setRetainInstance(true), или, возможно, onSaveInstanceState(), будут подходящими вариантами.

...