Présentation de la bibliothèque Paging Fait partie d'Android Jetpack.
La bibliothèque Paging vous permet de charger et d'afficher des pages de données depuis un ensemble de données plus volumineux, à partir d'un espace de stockage local ou sur réseau. Cette approche permet à votre application d'utiliser plus efficacement la bande passante réseau et les ressources système. Les composants de la bibliothèque Paging s'adaptent à l'architecture des applications Android recommandée, s'intègrent parfaitement aux autres composants Jetpack et offrent une excellente compatibilité avec Kotlin.
Avantages de la bibliothèque Paging
La bibliothèque Paging inclut les fonctionnalités suivantes :
- Mise en cache en mémoire pour vos données paginées. Cela garantit que votre application utilise efficacement les ressources système lorsqu'elle travaille avec des données paginées.
- Déduplication des requêtes intégrée, qui permet de garantir que votre application utilise efficacement la bande passante réseau et les ressources système
- Prise en charge de grande qualité des coroutines et des flux Kotlin.
- Assistance intégrée pour la gestion des exceptions avec fonctionnalités d'actualisation et de nouvelle tentative
Configuration
Pour importer des composants Paging dans votre application Android, ajoutez les dépendances suivantes au fichier build.gradle de votre application :
Kotlin
dependencies { val paging_version = "3.4.2" implementation("androidx.paging:paging-common:$paging_version") // Jetpack Compose integration implementation("androidx.paging:paging-compose:$paging_version") }
Groovy
dependencies { def paging_version = "3.4.2" implementation "androidx.paging:paging-common:$paging_version" // Jetpack Compose integration implementation "androidx.paging:paging-compose:$paging_version" }
Architecture de la bibliothèque
Les composants de la bibliothèque Paging fonctionnent dans trois couches de votre application :
- La couche de dépôt
- La couche
ViewModel - La couche de l'UI
Cette section décrit les composants de la bibliothèque Paging utilisés dans chaque couche, et explique comment ils fonctionnent ensemble pour charger et afficher les données paginées.
Couche de dépôt
PagingSource est le composant principal de la bibliothèque Paging dans la couche du dépôt. Chaque objet PagingSource définit une source de données et explique comment les récupérer. Un objet PagingSource peut charger des données à partir de n'importe quelle source, y compris des sources réseau et des bases de données locales.
Vous pouvez également utiliser le composant RemoteMediator de la bibliothèque Paging. Un objet RemoteMediator gère la pagination à partir d'une source de données multicouche, telle qu'une source de données réseau avec un cache de base de données locale.
Couche ViewModel
Le composant Pager fournit une API publique pour créer des instances de PagingData exposées dans des flux réactifs en fonction d'un objet PagingSource et d'un objet de configuration PagingConfig.
PagingData est le composant qui associe la couche ViewModel à l'UI. Un objet PagingData est un conteneur pour un instantané de données paginées. Il interroge un objet PagingSource et stocke le résultat.
Couche de l'UI
L'API d'UI Paging principale est collectAsLazyPagingItems(). Elle expose les éléments paginés sous forme de liste de données qui peuvent être facilement utilisées par les composants de mise en page différée de Compose, tels que LazyColumn et LazyRow.
Ajoutez la bibliothèque androidx.paging:paging-compose pour utiliser des API compatibles avec Compose qui permettent à l'UI de réagir automatiquement aux chargements, aux mises à jour et aux erreurs de données sans avoir besoin d'adaptateurs ni de logique de différenciation. Utilisez la
collectAsLazyPagingItems() fonction d'extension sur un Flow<PagingData>
pour transmettre le LazyPagingItems renvoyé à items() dans un 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() } } } }
Pour en savoir plus, consultez la section Ensembles de données volumineux (pagination).
Recommandations personnalisées
- Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé
- Charger et afficher des données paginées
- Effectuer une migration vers Paging 3
- Page du réseau et de la base de données