Сэмпл для демонстрации работы с пагинацией

May 26, 2020 · View on GitHub

Основные классы для работы с пагинацией:

В данном сэмпле реализован пагинируемый запрос на основе механизма page-count.

Классы описывающие апи и соответствующие уровню интерактор здесь. Но в реальном случае, загруженные данные должны быть также обернуты в DataList, проинициализированный мета-данными с сервера(смещение, страница и тп).

Работа с пагинацией происходит в презентере. Смещение следующего блока данных(или его страницу) берем через соответствующие методы у DataList. Загрузку проводим в методе loadMore(), который будет вызываться в колбеке у адаптера на view. Загруженный DataList сливаем с текущим через метод #merge().

Внимание: не используем стандартные методы для списков типа addAll()!

Состояние пагинации устанавливается не напрямую, а через соответсвующие методы ScreenModel: #setNormalPaginationState() и setErrorPaginationState(). В первый подается флаг возможности загрузки в список(обусловлен текущим количеством эдементов и totalCount). В завсисимости от него будут два состояния:

  • COMPLETE - загрузка завершена, дальнейшей подгрузки не будет.
  • READY - загрузка возможна;

После вызова onLoadMore() у адаптера его надо явно привести в состояние READY. Это делается вызовом установкой соответсвующего состояния у ScreenModel после успешной загрузки данных.