Я в настоящее время использую scrollListener, чтобы включить бесконечный свиток - вы можете найти мой вопрос и ответ Вилена здесь:Бесконечные прокрутки RecyclerView с разнородными размерами массива из API
Adding items to Endless Scroll RecyclerView with ProgressBar at bottom
Это творит чуда, когда у вас есть одинаковый размер каждый раз, когда вы активируете свой адаптер при прокрутке. Например, в коде Вилена он увеличивает размер набора данных на одинаковое количество, 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 не обязательно будут удалены ведущие к этому типу эффекта:
Итак, вы решили проблему или вам все еще нужна помощь? –
решена. Не могу поверить, что мне удалось это быстро решить. Потребовалось меньше времени, чем я думал, что это займет. Я не могу отметить свой ответ как правильный, но я сделаю это через 2 часа в соответствии с правилами SO. – Simon
Ну, если у вас есть лучший способ сделать это, вы можете опубликовать свое решение. Я чувствую, что мой путь немного взломан, но, похоже, он работает. – Simon