Я использую метод ниже, чтобы проверить, достигнуто ли Recyclerview снизу вверх или нет ... последняя позиция в Recyclerview видна или нет:
recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
}
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (dy > 0) {
visibleItemCount = recyclerView.getLayoutManager()!!.getChildCount()
totalItemCount = recyclerView.getLayoutManager()!!.getItemCount()
pastVisiblesItems =
(recyclerView.getLayoutManager() as GridLayoutManager).findFirstVisibleItemPosition()
if (visibleItemCount + pastVisiblesItems >= totalItemCount && isLoadMore) {
// mocking network delay for API call
apiCall()
}
}
}
})
Проблема apiCall()
вызывает twise или thrise когда-то, когда я прокручиваю Recyclerview внизу .
Вы можете видеть, что я управляю булевой переменной isLoadMore
Здесь я Прохождение 1. Страница, 2. Ограничение при звонке на мой веб-сервис.
по умолчанию страница равна 1, а ограничение равно 20. В следующий раз будет 2 (страница) и 20 (ограничение).
Итак, выборка 20 данных для каждого вызова веб-службы.
Теперь, если в ответ я обнаружил, что размер новых данных меньше моего предела, я делаю для isLoadMore значение false.
В чем может быть проблема? Не могли бы вы помочь мне решить эту проблему. Как я могу точно знать, что это время, когда нужно обратиться в службу поддержки, когда просмотрщик завершает свою работу.
Спасибо.