Viewpager+FragmentpagerAdapet+Fragments+Listview = безумно медленное приложение

У меня есть viewpager в моем макете, этот viewpager содержит набор из 10 фрагментов. Каждый фрагмент имеет представление списка, которое заполняется асинхронно. В настоящее время я использую FragmentPagerAdapter в качестве адаптера для пейджера, а вызовы API для заполнения представления списка выполняются в onCreateView каждого фрагмента. Пролистывание происходит безумно медленно, и приложение само закрывается из-за проблем с памятью.

Как добиться гладкости и отзывчивости (viewpager+listview), как это делает Google Play? Плавное смахивание + хороший кеш элементов списка?

введите здесь описание изображения


person user2749265    schedule 28.12.2013    source источник
comment
Еще одна вещь, которую я хотел бы добавить в этот вопрос, могу ли я получить просмотр пейджера во фрагменте, если да, то как ??   -  person rupesh    schedule 28.12.2013


Ответы (1)


Существует много способов повысить производительность ViewPager, интегрированного с ListView.

Сначала измените PagerAdapter с FragmentPagerAdapter на FragmentStatePagerAdapter. Разница в том, что вы загружаете 10 страниц в пейджер. И если вы прошли все, менеджер поместит только страницы в onStop(), поэтому он зарезервирует место. Однако использование FragmentStatePagerAdapter уничтожит эти страницы, но сохранит их экземпляр с помощью метода onSaveInstanceState. Поэтому, когда вы вернетесь, загрузка не займет много времени, и вы сэкономите память.

Обычно FragmentPagerAdapter используется с 3 страницами или меньше.

Второй способ повысить производительность (но он быстрее разряжает батарею) — добавить эту строку в AndroidManifest.xml под тегом вашего приложения:

android:hardwareAccelerated="true"

Третий способ — обнаружение жеста смахивания. Вы можете сделать это, реализуя onPageChangeListener, затем в реализованном методе onPageScrollStateChanged вы проверяете, является ли страница Idle, а затем добавляете ListView. В противном случае прекратите использование ListView и перейдите к следующей странице. Вот лучшее объяснение этого пункта.

Надеюсь, что некоторые из этих пунктов помогут вам добиться лучшей производительности.

person Coderji    schedule 28.12.2013
comment
Привет, если я использую onPageChangeListener, то каждый раз, когда я прокручиваю страницу, она будет вызывать API и заполнять ее. Как я могу кэшировать результаты. Мои вызовы API вернут мне JSON. - person user2749265; 28.12.2013