Сохранение элементов списка в ListAdapter в ConfigurationChanges с помощью setRetainInstance

1

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

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

благодаря

Теги:
android-fragments
listview
android-arrayadapter

1 ответ

3
Лучший ответ

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

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

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

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

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

  • 0
    Итак, если у меня есть данные, загруженные из сети, правильные шаги: сохранить их в базе данных, а затем загрузить из базы данных? Я использовал для перехода к шагу сохранения в БД и сохранить его с помощью onSaveInstanceState. Очень неправильно? Спасибо
  • 0
    @Matroska: «Итак, если у меня есть данные, загруженные из сети, правильные шаги: сохранить их в базе данных, а затем загрузить из базы данных?» - если вы не хотите загружать данные сразу же, вы должны сохранить их на диск в той или иной форме. Например, если пользователь запускает ваше приложение завтра, и данные не должны отличаться, зачем загружать его снова? "Очень неправильно?" - Bundle для onSaveInstanceState() не должен быть очень большим, так как он копируется и передается между процессами. «Состояние экземпляра» обычно относится к тому, что пользователь сделал в действии, а не к его вспомогательным данным.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню