В настоящее время я использую scrollListener для включения бесконечного прокрутки - вы можете найти мой вопрос и ответ Вилена здесь:
Добавление элементов в Endless Scroll RecyclerView с помощью ProgressBar в нижняя
Это работает, когда у вас есть размер тот же , когда вы активируете свой адаптер при прокрутке. Например, в коде Вилена он увеличивает размер набора данных с помощью Количество, 15, каждый раз, когда он прокручивает.
Однако в реальном мире это часто бывает не так. У вас есть разнородные размеры данных. В моем примере я хотел бы сделать следующее:
Я хотел бы реализовать геопространственный поиск, чтобы он возвращал список ближайших мне мест. Теперь, если я буду сидеть в пустыне, мой вызов REST API вернет места в пределах 10 км от меня, и это может быть только 4 места (хижина верблюда, пирамиды, водопоя и кокосовое дерево).
Заполнение 4 элементов в recyclerview не сделает recyclerview достаточно длинным, чтобы позволить ему прокручивать дальше, чтобы мое приложение снова вызвало вызов API, чтобы найти больше мест ближе ко мне. Следующие 10 км (20 км от моего текущего местоположения) могут быть городом с большим количеством мест, чтобы вернуться, но поскольку для повторного просмотра недостаточно времени для прокрутки, вызов API не выполняется.
Я также сделал крошечное репо, чтобы продемонстрировать, что прослушиватель прокрутки не запускается, когда recyclerview слишком короткий:
https://github.com/Winghin2517/DissimilarDataSetSizeRV.git
Как я могу обойти эту проблему?
Я почти чувствую, что scrolllistener должен запускаться до тех пор, пока recyclerview не заполнит экран, но как я могу определить, когда экран будет заполнен, так как не существует обратного вызова для recyclerview-fill-up-screen, насколько я знаю .
Я попытался прекратить изменять boolean loading
, чтобы увидеть, что это поможет, но без логической проверки состояния загрузки, progressBar не обязательно будет удален, что приведет к этому типу эффекта: