Пейджинг 3. Как прокрутить RecyclerView до верхней части после того, как PagingDataAdapter завершил обновление И DiffUtiAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Пейджинг 3. Как прокрутить RecyclerView до верхней части после того, как PagingDataAdapter завершил обновление И DiffUti

Сообщение Anonymous »

Я использую Paging 3 с RemoteMediator, который отображает кэшированные данные при получении новых данных из сети.
Когда я обновляю свой PagingDataAdapter (путем вызова обновления() на нем), я хочу, чтобы мой RecyclerView прокручивался вверх после завершения обновления. В лабораториях кода они пытаются справиться с этим через loadStateFlow следующим образом:

Код: Выделить всё

lifecycleScope.launch {
adapter.loadStateFlow
// Only emit when REFRESH LoadState for RemoteMediator changes.
.distinctUntilChangedBy { it.refresh }
// Only react to cases where Remote REFRESH completes i.e., NotLoading.
.filter { it.refresh is LoadState.NotLoading }
.collect { binding.list.scrollToPosition(0) }
}
Это действительно прокрутка вверх, но до завершения работы DiffUtil. Это означает, что если вверху действительно вставлены новые данные, RecyclerView не будет прокручиваться до конца вверх.
Я знаю, что адаптеры RecyclerView имеют AdaptorDataObserver обратный вызов, с помощью которого мы можем получить уведомление, когда DiffUtil завершит сравнение. Но это вызовет всевозможные состояния гонки с состояниями загрузки адаптера PREPEND и APPEND, что также приведет к запуску DiffUtil (но здесь мы не хотим прокручивать вверх).
Одним из решений, которое могло бы сработать, было бы передать PagingData.empty() в PagingDataAdapter и повторно выполнить тот же запрос (простой вызов обновления не сработает). потому что PagingData теперь пуст и обновлять нечего), но я бы предпочел, чтобы мои старые данные оставались видимыми до тех пор, пока я не узнаю, что обновление действительно прошло успешно.

Подробнее здесь: https://stackoverflow.com/questions/658 ... r-has-fini
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»