Узнайте, как добавить верхний и нижний колонтитулы, повторить макеты и сопоставить данные с помощью пейджинга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, прочтите следующие статьи:
- « Основы WorkManager, как использовать WorkManager с Rxjava2 и Kotlin Coroutines »
- « Постоянная библиотека Android Room 🔗 Kotlin Coroutines »
- « Jetpack Compose - новый и простой способ создания UI материалов в Android »
- « Hilt - Новая библиотека внедрения зависимостей для Android »
- « Запуск приложения - новый компонент архитектуры »
На этом пока все, надеюсь, вы узнали что-то полезное, спасибо за чтение.