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
Une image montre des flux de données paginés des composants PagingSource ou RemoteMediator de la couche du dépôt vers le composant Pager de la couche ViewModel.
    Le composant Pager expose ensuite un flux de PagingData aux composants de mise en page différée dans la couche de l'UI.
Figure 1. Exemple illustrant comment la bibliothèque Paging s'intègre à l'architecture de votre application.

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).