PagedList RecyclerView прыжок после аннулирования pagedList - PullRequest
2 голосов
/ 13 июня 2019

Настройка:

Мы используем PagedListEpoxyController, RxPagedListBuilder, ItemKeyedDataSource со временем выполнения Mockgenerator, которое просто создает пользователя по отношению к индексу генерируемых данных, например. user1, user100, user500 и т. Д.

Конфигурация подкачки:

val pageSize = 50
val initialLoadSizeHint = 80
val prefetchDistance = 16

Ожидаемое поведение

Всякий раз, когда мы прокручиваем вниз до элемент 400th и возвращаемся к элементу 300th и аннулируют список, нажав Follow / Unfollow пользовательский интерфейс. Когда кнопка нажата, PagedList становится недействительным, например:

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...