Настройка:
Мы используем PagedListEpoxyController
, RxPagedListBuilder
, ItemKeyedDataSource
со временем выполнения Mockgenerator
, которое просто создает пользователя по отношению к индексу генерируемых данных, например. user1, user100, user500 и т. Д.
Конфигурация подкачки:
val pageSize = 50
val initialLoadSizeHint = 80
val prefetchDistance = 16
Ожидаемое поведение
Всякий раз, когда мы прокручиваем вниз до элемент 400th и возвращаемся к элементу 300th и аннулируют список, нажав Follow / Unfollow пользовательский интерфейс. Когда кнопка нажата, PagedList становится недействительным, например:
followers.dataSource.invalidate()
loadInitial()
внутри ItemKeyedDataSource
следует вызывать со значением params.key
, чтобы мы могли получить ту же страницу, которая была ранее отображена, для повторного отображения. Например, если user300 было видимым на экране, этот элемент requestedInitialKey
должен находиться в диапазоне [user221, user280] .
Где проблема?
Дорожки библиотеки подкачки last item that was fetched in the pagedList
до аннулирования but does not
предоставляют способ узнать, какой был last item/range that was visible
на экране непосредственно перед аннулированием.
После аннулирования pagedList первым обратным вызовом, который вызывается после аннулирования pagedList, является loadInitial(params : LoadInitialParams, callback : LoadInitialCallback)
, при этом params
содержит только информацию о pageSize и заполнителе вместе с requestedInitialKey
как last item that was fetched
до аннулирования, что очень вводит в заблуждение. Почему after invalidation
pagedList делает request
последний элемент, который будет выбран в списке как requestedInitialKey / item in the firstPage
, а не the last item that was displayed before invalidation
?. Извините, если я полностью не понял эту вещь, но не мог понять это.
Вопрос:
Я хочу, чтобы pagedList
- начали извлекать первую страницу в новом PagedList после аннулирования из предыдущего места прокрутки , а не последнего элемента в предыдущем pagedList .
Но если PagedList не должен работать таким образом, то Как я могу узнать какой-либо элемент / индекс, который был ранее виден на экране до аннулирования?
Если я и сейчас не могу этого сделать, каков рекомендуемый способ выполнения этого требования ?
Эту проблему можно найти здесь:
Для воспроизведения: прокрутите вниз достаточно далеко (как 60-й предмет) и нажмите «Обновить» , вы увидите скачок в списке.
Ссылка на выпуск github