Android ViewPager предварительно загружает слишком много фрагментов - PullRequest
0 голосов
/ 04 ноября 2018

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

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

fff У меня есть 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 перед текущей позицией). Чем меньше ширина страницы, тем больше фрагментов загружается раньше.

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

1 Ответ

0 голосов
/ 04 ноября 2018

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

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

...