Intereting Posts
TaskStackBuilder в PendingIntent не работает Несколько светильников на одном теле или нескольких телах? Использовать видеочат в фоновом режиме, например, Skype с помощью WebRTC на Android Динамически добавлять удаляемую форму управления linearlayout Задание прозрачных вырезов в xml drawable Android обновил подписку orderID Как получить сохраненное имя контакта отправителя SMS (Person) с помощью «content: // sms / inbox» Интеграция NDK в студии Android Как отслеживать пользователей, работающих с органическими и платными пользователями в моем приложении? API Android Bump Невозможно использовать панель действий и фрагмент в Android 2.3 Android: чтение и запись метаданных .mp4 -Tag Эмулированное Android-устройство не синхронизирует время и дату после восстановления моментального снимка Kotlin: Как работать со списками: Непроверено В ролях: kotlin.collections.List <Kotlin.Any?> To kotlin.colletions.List <Путевая точка> ObjectAnimator Proxy для анимации TopMargin не может найти настройки / getter

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

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

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

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

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

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

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

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

 android:hardwareAccelerated="true" 

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

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