Узнайте, как добавить верхний и нижний колонтитулы, повторить макеты и сопоставить данные с помощью пейджинга3

Я предполагаю, что вы знакомы с основами библиотеки paging3; в противном случае я бы рекомендовал ознакомиться с частью 1 этой серии.

Вывод из этой статьи

В этой статье вы узнаете, как добавить настраиваемые нижние колонтитулы, заголовки, разделители и макеты повторных попыток в адаптер подкачки с помощью фрагментов кода. Вы также узнаете, как применять преобразования к данным между их загрузкой и представлением.

Давайте продолжим с того же примера из части 1 этой серии: ничего, кроме вызова службы разбивки на страницы (категорий) из Spotify API.

Трансформации

Первое, что мы узнаем в этой статье, - это как применять преобразования к списку с сервера перед добавлением его в PagingDataAdapter.

Мы можем применить преобразования к Pager в репозитории. Мы можем использовать оператор map, чтобы преобразовать модель сервера в локальную модель или применить определенные модификации к каждому элементу.

Перед этим мы должны создать отдельную Локальную модель и модели серверов, как показано ниже:

Здесь мы использовали запечатанный класс для локальной модели; вы узнаете почему в следующих разделах.

Пришло время преобразовать результат серверной модели в локальную модель. Мы собираемся реализовать это с помощью функции map. Взгляни:

Подобно карте, мы можем использовать оператор фильтра, чтобы удалить ненужные элементы из списка. Взгляни:

Добавление разделителей

Часто в режиме реального времени мы просто не отображаем данные с сервера. Бывают ситуации, когда нам нужно показать рекламу, или поставить оценку нашему блоку, или какие-то рекламные карточки с бизнес-логикой где-то в списке.

Мы можем добавлять элементы статического списка, используя insertSeparators из библиотеки paging3. Это немного сложно по сравнению с использованием операторов map и filter в потоке пейджера.

Прежде чем идти дальше, вспомните, как я сказал, что вы поймете важность запечатанного класса для местной модели, ну, пора. В запечатанном классе UIModel мы можем добавить необходимые классы данных, которые должны отображаться в списке. Подобно классу данных для отображения элемента списка, оценивающего нас. Взгляни:

Пришло время добавить элемент rateus в список подкачки. Мы можем сделать это с помощью insertSeparators. Все элементы статического списка, предназначенные для отображения в списке, обрабатываются как разделители при разбиении на страницы3. Взгляни:

shouldSeparate - это функция для реализации вашей логики based на before и после элементов в списке. Используя эту логику, мы можем добавить любое количество разделителей в список подкачки.

Хорошо, что мы добавили статический элемент в список, но как с этим бороться в адаптере. Это просто; мы можем сравнивать экземпляры, одно из преимуществ использования запечатанных классов. Взгляни:

Заголовки и колонтитулы

Допустим, мы хотим добавить верхний или нижний колонтитул к нашему списку подкачки. У Paging3 есть способ сделать это проще всего. Во-первых, мы должны добавить объекты верхнего и нижнего колонтитула в запечатанный класс, как показано ниже:

Пришло время добавить верхний и нижний колонтитулы в список подкачки. Для этого в библиотеке подкачки есть две функции: insertHeaderItem & insertFooterItem. Взгляните на следующий код, чтобы узнать, как их использовать.

После этого мы можем добавить модели верхнего и нижнего колонтитула в адаптер, аналогично тому, как мы реализовали RateUsModel.

Отображение состояния нагрузки

Что, если мы хотим добавить состояние загрузки, такое как отображение значка загрузки в нижнем колонтитуле или макет повторной попытки в нижней части списка при возникновении ошибки. Они отличаются от элементов содержимого; paging3 предоставляет новый тип адаптера под названием LoadStateAdapter для их обработки без каких-либо изменений в пейджере или адаптере.

Давайте создадим простой LoadStateViewHolder, который принимает в качестве параметра функцию высшего порядка (повтор). В котором нам нужно показать соответствующее представление, например progressbar или кнопку повтора. Взгляни:

Теперь нам нужно заменить PagingDataAdapter на LoadStateAdapter. Взгляни:

Пришло время создать экземпляр во фрагменте и добавить вьюхолдеры loadstate. Взгляни:

Это все, что нам не нужно для добавления элементов состояния загрузки в список; loadStateAdapter будет обрабатывать их внутренне.

Бонус

Чтобы узнать больше о библиотеках Jetpack, прочтите следующие статьи:

На этом пока все, надеюсь, вы узнали что-то полезное, спасибо за чтение.

Вы можете найти меня в Medium, Twitter, Quora и LinkedIn.