Обзор библиотеки для страничной навигации. Часть Android Jetpack .
Библиотека Paging помогает загружать и отображать страницы данных из большого набора данных из локального хранилища или по сети. Такой подход позволяет вашему приложению более эффективно использовать как пропускную способность сети, так и системные ресурсы. Компоненты библиотеки Paging разработаны таким образом, чтобы соответствовать рекомендуемой архитектуре приложений Android , чисто интегрироваться с другими компонентами Jetpack и обеспечивать первоклассную поддержку Kotlin.
Преимущества использования библиотеки Paging
Библиотека «Панельная навигация» включает в себя следующие функции:
- Кэширование в оперативной памяти для ваших постраничных данных. Это помогает обеспечить эффективное использование системных ресурсов вашим приложением при работе с постраничными данными.
- Встроенная функция дедупликации запросов помогает обеспечить эффективное использование пропускной способности сети и системных ресурсов вашим приложением.
- First-class support for Kotlin coroutines and flows.
- Встроенная поддержка обработки ошибок, включая функции обновления и повторной попытки.
Настраивать
Чтобы импортировать компоненты пагинации в ваше Android-приложение, добавьте следующие зависимости в файл build.gradle вашего приложения:
Котлин
dependencies { val paging_version = "3.4.2" implementation("androidx.paging:paging-common:$paging_version") // Jetpack Compose integration implementation("androidx.paging:paging-compose:$paging_version") }
Классный
dependencies { def paging_version = "3.4.2" implementation "androidx.paging:paging-common:$paging_version" // Jetpack Compose integration implementation "androidx.paging:paging-compose:$paging_version" }
архитектура библиотеки
Компоненты библиотеки Paging работают на трех уровнях вашего приложения:
- Уровень репозитория
- Слой
ViewModel - Слой пользовательского интерфейса
В этом разделе описываются компоненты библиотеки постраничной навигации, работающие на каждом уровне, и то, как они взаимодействуют для загрузки и отображения постраничных данных.
Уровень репозитория
Основным компонентом библиотеки постраничной навигации в слое репозитория является PagingSource . Каждый объект PagingSource определяет источник данных и способ извлечения данных из этого источника. Объект PagingSource может загружать данные из любого источника, включая сетевые источники и локальные базы данных.
Ещё один компонент библиотеки для работы с постраничной навигацией, который вы можете использовать, — это RemoteMediator . Объект RemoteMediator обрабатывает постраничную навигацию из многоуровневого источника данных, например, сетевого источника данных с локальным кэшем базы данных.
слой ViewModel
Компонент Pager предоставляет публичный API для создания экземпляров PagingData , которые отображаются в реактивных потоках, на основе объекта PagingSource и объекта конфигурации PagingConfig .
Компонентом, связывающим слой ViewModel с пользовательским интерфейсом, является PagingData . Объект PagingData представляет собой контейнер для снимка данных, разбитых на страницы. Он запрашивает объект PagingSource и сохраняет результат.
слой пользовательского интерфейса
Основной API для постраничной навигации — это collectAsLazyPagingItems() . Он предоставляет элементы постраничной навигации в виде списка данных, которые легко могут быть использованы компонентами ленивой компоновки Compose, такими как LazyColumn и LazyRow .
Добавьте библиотеку androidx.paging:paging-compose чтобы использовать совместимые с Compose API, позволяющие пользовательскому интерфейсу автоматически реагировать на загрузку данных, обновления и ошибки без необходимости использования адаптеров или логики сравнения. Используйте функцию расширения collectAsLazyPagingItems() в Flow<PagingData> , чтобы передать возвращаемые LazyPagingItems в items() в LazyColumn .
@Composable fun MessageList(pager: Pager<Int, Message>) { val lazyPagingItems = pager.flow.collectAsLazyPagingItems() LazyColumn { items( lazyPagingItems.itemCount, key = lazyPagingItems.itemKey { it.id } ) { index -> val message = lazyPagingItems[index] if (message != null) { MessageRow(message) } else { MessagePlaceholder() } } } }
Для получения более подробной информации см. раздел «Большие наборы данных (постраничная навигация)» .
{% verbatim %}Рекомендуем вам
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Загрузка и отображение постраничных данных
- Перейти к пейджингу 3
- Страница из сети и базы данных