Сэмпл для демонстрации работы с пагинацией
May 26, 2020 · View on GitHub
Основные классы для работы с пагинацией:
- DataList(на выбор в зависимости от механизма на сервере):
- класс-наследник базового адаптера для пагинации. Нужен для настройки футера.
- класс-наследник ..Pgn..ScreenModel. Поддерживает установку состояния пагинации.
В данном сэмпле реализован пагинируемый запрос на основе механизма page-count.
Классы описывающие апи и соответствующие уровню интерактор здесь. Но в реальном случае, загруженные данные должны быть также обернуты в DataList, проинициализированный мета-данными с сервера(смещение, страница и тп).
Работа с пагинацией происходит в презентере.
Смещение следующего блока данных(или его страницу) берем через соответствующие
методы у DataList.
Загрузку проводим в методе loadMore(), который будет вызываться в колбеке у
адаптера на view.
Загруженный DataList сливаем с текущим через метод #merge().
Внимание: не используем стандартные методы для списков типа addAll()!
Состояние пагинации устанавливается не напрямую, а через соответсвующие методы
ScreenModel: #setNormalPaginationState() и setErrorPaginationState().
В первый подается флаг возможности загрузки в список(обусловлен текущим количеством эдементов и totalCount).
В завсисимости от него будут два состояния:
- COMPLETE - загрузка завершена, дальнейшей подгрузки не будет.
- READY - загрузка возможна;
После вызова onLoadMore() у адаптера его надо явно привести в состояние READY. Это делается вызовом установкой соответсвующего состояния у ScreenModel после успешной загрузки данных.