Android ViewPager предварительно загружает слишком много фрагментов

1

ViewPager предварительно загружает фрагменты.

Но с pageWidth = 0.5 (2 фрагмента на экран), я думаю, он загружает слишком много просмотров перед текущей позицией...

Изображение 174551 У меня есть pageLimit=1 и pageWidth=0.5.
Это должно быть нормально для предварительной загрузки LEFT1 и LEFT2, но почему LEFT3?
LEFT3 не на следующем левом экране...

Я пытался понять ViewPager.java из поддержки v4:
https://android.googlesource.com/platform/frameworks/support/+/support-library-27.1.1/core-ui/src/main/java/android/support/v4/view/ViewPager.java#1155

строка 1155, это говорит

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

С примером проекта Google https://github.com/googlesamples/android-SlidingTabsBasic/
добавление

protected void onCreate(Bundle savedInstanceState) {
   [...]
   mViewPager.setCurrentItem(25);

@Override
public float getPageWidth(int position) {
     // 2 fragments per screen
     return .5f;
}
@Override
public int getCount() {
    // 50 fragments
    return 50;
}
public Fragment getItem(int position) {
    [...]
    Log.d("debugpageviewer", "position="+position);
}

И он загружает 7 фрагментов (3 до текущей позиции). Чем меньше ширина страницы, тем больше фрагментов загружается раньше.

Итак, это ошибка или я что-то упустил?

Теги:
android-viewpager

1 ответ

0

Попробуйте вызвать setOffscreenPageLimit() для вашего ViewPager в вашем методе onCreate.

Например, mViewPager.setOffscreenPageLimit(2) гарантирует, что всегда будет храниться не более 3 фрагментов: текущий и два соседних.

  • 0
    Да, я попробовал это, и по умолчанию 1. Но условие для продолжения создания представлений - extraWidthLeft >= leftWidthNeeded # 1166. Таким образом, создается больше фрагментов, чем setOffscreenPageLimit.

Ещё вопросы

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