Библиотека подкачки 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. При этом похоже, что это скорее обходной путь, чем хороший ответ на эту проблему.