Ответ
Однажды мне нужно было реализовать бесконечную ленту с пагинацией, но с "умной" подгрузкой - чтобы при быстром скролле не грузились промежуточные страницы.
Решение:
val scrollListener = object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
val lastVisiblePosition = layoutManager.findLastVisibleItemPosition()
val threshold = 5
if (lastVisiblePosition > adapter.itemCount - threshold
&& !isLoading
&& !isLastPage) {
loadNextPage()
}
}
}
Ключевые моменты:
- Дебаунс для быстрого скролла
- Проверка
isLoadingиisLastPage - Оптимальный threshold для плавности
- Отмена pending запросов при скролле
Это дало плавный UX и экономию трафика.