Android: Viewpager и FragmentStatePageAdapter

Я разрабатываю приложение, которое позволяет пользователям переключаться между несколькими страницами в ViewPager. Я изо всех сил пытался выяснить, как можно удалить экземпляр фрагмента со страницы, когда он больше не отображается на экране, кэшировать его (например, в HashMap), а затем восстановить его, чтобы, когда пользователь возвращается на эту страницу, просмотры и все остальное на ней будут в том же состоянии, что и до удаления. Например, моя первая страница - это экран входа в систему, который делает определенные элементы макета на этой конкретной странице видимыми / невидимыми при успешном входе в систему. Когда я пролистываю достаточно страниц вперед, а затем возвращаюсь на первую страницу, макет сбрасывается. Это становится большей проблемой для другой моей страницы, которая содержит огромную горизонтальную / вертикальную сетку прокрутки данных, которую я использую в фоновом режиме для рисования при инициализации. Я использую диалог выполнения, чтобы уведомить пользователя о ходе загрузки, и это становится действительно раздражающим каждый раз, когда мне приходится его загружать.

Итак, я провел небольшое исследование ...

Я просмотрел исходный код для FragmentStatePageAdapter и в destroyItem (), состояние удаляемого экземпляра фрагмента сохраняется в ArrayList. Когда в обратном вызове instantiateItem () создается новый экземпляр Fragment, если экземпляр элемента еще не существует (они отслеживают это с помощью ArrayList), создается новый экземпляр Fragment и его сохраненное состояние инициализируется соответствующими данными Fragment.SavedState. К несчастью,эти данные не включают состояние, в котором находились представления, хотя я заметил, что для страниц с GridView / ListView состояние представлений было каким-то образом восстановлено (если я прокрутил до некоторой случайной позиции, перевернул несколько страниц и вернулся, это не будет сброшен).

Согласно API:

Сохраненное состояние не может содержать зависимости от других фрагментов - то есть он не может использовать putFragment (Bundle, String, Fragment) для хранения ссылка на фрагмент, потому что эта ссылка может быть недействительной, когда сохраненное состояние используется позже. Точно так же цель и результат фрагмента код не включен в это состояние.

Поскольку я новичок в Android, я не совсем уверен, что понимаю последнее утверждение.

При этом, есть ли способ кэшировать состояние просмотра? Если нет, думаю, я просто оставлю все страницы фрагментов в памяти.

9
задан Android Noob 2 August 2011 в 06:33
поделиться