Библиотека подкачки Android не запускает loadAfter()

Я использую новую библиотеку Android Paging для получения RecyclerView с бесконечной прокруткой. Я не могу понять, почему библиотека не запускает метод loadAfter(), когда я настраиваю свой PagedList следующим образом:

val config: PagedList.Config = PagedList.Config.Builder()
                .setEnablePlaceholders(false)
                .setPageSize(10)
                .setPrefetchDistance(1)
                .setInitialLoadSizeHint(10)
                .build()
val pageList = PagedList.Builder(LookDataSource(lookList), config)
                .setInitialKey(0)
                .setMainThreadExecutor(MainThreadExecutor())
                .setBackgroundThreadExecutor(PaginationThreadPoolExecutor())
                .setBoundaryCallback(LookBoundaryCallback())
                .build()

Примечание: мой prefetchDistance равен 1, так как я хочу загрузить другой пакет данных, когда мой последний элемент будет просмотрен. В документации сказано, что 0 никогда не будет загружать больше данных

Мой источник данных - это PageKeyedDataSource, а ключ - это индекс страницы.

Я посмотрел на исходный код ContiguousPagedList, который является конкретным PagedList, созданным, когда вы используете PageKeyedDataSource, и я не могу понять это:

@MainThread
@Override
protected void loadAroundInternal(int index) {
    int prependItems = mConfig.prefetchDistance - (index - mStorage.getLeadingNullCount());
    int appendItems = index + mConfig.prefetchDistance
            - (mStorage.getLeadingNullCount() + mStorage.getStorageCount());

    mPrependItemsRequested = Math.max(prependItems, mPrependItemsRequested);
    if (mPrependItemsRequested > 0) {
        schedulePrepend();
    }

    mAppendItemsRequested = Math.max(appendItems, mAppendItemsRequested);
    if (mAppendItemsRequested > 0) {
        scheduleAppend();
    }
}

Согласно моей конфигурации, значение appendItems равно 0, когда виден мой последний элемент

int appendItems = index + mConfig.prefetchDistance - (mStorage.getLeadingNullCount() + mStorage.getStorageCount());

с

  • индекс + 9 (последний элемент с размером страницы 10 элементов)
  • prefetchDistance - 1
  • leadNullCount всегда равен 0 (не уверен, что я понимаю этот атрибут)
  • storageCount - это размер страницы, который я настроил выше (в соответствии с исходным кодом этого класса)

дает

int appendItems = 9 + 1 (0 - 10)

Исходя из этого, scheduleAppend() никогда не вызывается, поскольку mAppendItemsRequested также всегда равно 0.

Единственный способ на самом деле загрузить больше данных при прокрутке - это установить для моего prefetchDistance любое значение, превышающее 1. При этом похоже, что это скорее обходной путь, чем хороший ответ на эту проблему.

0 ответов

Заменить ListAdapter на PagedListAdapter

Другие вопросы по тегам