2012-07-02 5 views
23

Я хотел бы кэшировать фрагмент. В моей активности есть вкладки с прокруткой, и каждая вкладка вызывает другой фрагмент. Но когда я сажусь между вкладками, переход кажется довольно медленным из-за разрушения вида фрагмента, который перестраивается во время операции салфетки. Кто-нибудь знает, как я могу кэшировать представление каждого фрагмента, чтобы предотвратить эту проблему? Я работаю с поддержкой библиотеки v4 и api 14Как кэшировать представление фрагмента

Я попытался реализовать конструктор для фрагментов, вызываемый контейнером активности фрагментов: я вызываю конструктор, фрагменты создаются как переменные класса активности, а затем , всякий раз, когда фрагмент должен проявлять себя, класс активности возвращает объект фрагмента, который я создал ранее, но это не улучшает мое приложение много, потому что вид фрагмента уничтожен в любом случае

+0

вы пытались кэшировать представление в самом фрагменте, а в onCreateView вы возвращаете кешированный фрагмент? Или взгляд всегда разрушен? – ffleandro

+0

Используете ли вы 'ViewPager' для своих« прокручиваемых вкладок »? – Evos

+0

Я использую swipeable tabs – Release

ответ

23

Это связано с тем, что по умолчанию пейджер загружает максимум 3 страницы (фрагменты) в то время: отображение одного, предыдущего и следующего, так что если у вас есть 5 фрагментов, это произойдет, когда вы перейдете от первого до последнего: (где x - загруженные фрагменты т)

xx000 -> xxx00 -> 0xxx0 -> 00xxx -> 000xx

Попробуйте использовать

myPager.setOffscreenPageLimit(ITEMS_COUNT-1); 

Это покажет пейджера, чтобы все они в памяти, а не уничтожать/создавать с каждым ударом (внимательно следить за управлением памятью)

+1

Не будет ли этот вызов 'onCreateView' фрагмента вкладки? (Когда загружается представление макета фрагмента) – StarDust

+1

@StarDust да, это вызовет onCreateView для всех фрагментов одновременно в начале. Это сложно, вы можете потерять память или просто получить черный экран или блок, потому что процесса загрузки фрагментов. Это решение приятно, если вам нужно загрузить 4 или 5 легких фрагментов, но я бы не сделал это для 10 фрагментов с большой нагрузкой. Вы можете установить offscreenPageLimit на любое число ниже, чем количество ваших фрагментов, например, если у вас есть 10 страниц и установить ограничение на 4, и вы находитесь на 6-м экране, он будет загружать 2 дополнительных в обоих направлениях, как этот 000xx ** x * * xx00 (лучшее решение, я думаю) – MariusBudin

Смежные вопросы