Panoramica della libreria Paging Parte di Android Jetpack.
La libreria Paging ti aiuta a caricare e visualizzare pagine di dati da un set di dati più grande dallo spazio di archiviazione locale o su una rete. Questo approccio consente alla tua app di utilizzare sia la larghezza di banda della rete sia le risorse di sistema in modo più efficiente. I componenti della libreria Paging sono progettati per adattarsi all'architettura delle app per Android consigliata, integrarsi perfettamente con altri componenti Jetpack e fornire un supporto Kotlin di prima classe.
Vantaggi dell'utilizzo della libreria Paging
La libreria Paging include le seguenti funzionalità:
- Memorizzazione nella cache in memoria per i dati impaginati. In questo modo, l'app utilizza le risorse di sistema in modo efficiente durante l'utilizzo dei dati impaginati.
- Deduplicazione delle richieste integrata, che contribuisce a garantire che l'app utilizzi la larghezza di banda della rete e le risorse di sistema in modo efficiente.
- Supporto integrato per coroutine, flussi e Jetpack Compose di Kotlin.
- Supporto integrato per la gestione degli errori, incluse le funzionalità di aggiornamento e nuovo tentativo.
- Utilità di test dedicate, come
TestPagereasSnapshot, per verificare le origini di paging e le trasformazioni dei dati.
Configurazione
Per importare i componenti di Paging nella tua app per Android, aggiungi le seguenti dipendenze al file build.gradle dell'app:
Kotlin
dependencies { val paging_version = "3.5.3" // Needed for Android Views and LiveData. Optional if only using // paging-compose implementation("androidx.paging:paging-runtime:$paging_version") // Needed to collect PagingData flows in Jetpack Compose implementation("androidx.paging:paging-compose:$paging_version") // Needed to test PagingSource and PagingData transformations in isolation testImplementation("androidx.paging:paging-testing:$paging_version") }
Alla moda
dependencies { def paging_version = "3.5.3" // Needed for Android Views and LiveData. Optional if only using // paging-compose implementation "androidx.paging:paging-runtime:$paging_version" // Needed to collect PagingData flows in Jetpack Compose implementation "androidx.paging:paging-compose:$paging_version" // Needed to test PagingSource and PagingData transformations in isolation testImplementation "androidx.paging:paging-testing:$paging_version" }
Architettura della libreria
I componenti della libreria Paging operano in tre livelli della tua app:
- Il livello del repository
- Il livello
ViewModel - Il livello UI
Questa sezione descrive i componenti della libreria Paging che operano in ogni livello e il modo in cui interagiscono per caricare e visualizzare i dati impaginati.
Livello repository
Il componente principale della libreria Paging nel livello del repository è
PagingSource. Ogni oggetto PagingSource definisce un'origine dati e il modo in cui recuperare i dati da quell'origine. Un oggetto PagingSource può caricare dati da qualsiasi singola origine,
incluse origini di rete e database locali.
Un altro componente della libreria Paging che potresti utilizzare è RemoteMediator. Un oggetto RemoteMediator gestisce l'impaginazione da un'origine dati a più livelli, ad esempio un'origine dati di rete con una cache del database locale.
Livello ViewModel
Il componente Pager fornisce un'API pubblica per la creazione di istanze di PagingData esposte in stream reattivi, in base a un oggetto PagingSource e a un oggetto di configurazione PagingConfig.
Il componente che connette il livello ViewModel alla UI è
PagingData. Un oggetto PagingData è un container per uno snapshot di dati impaginati. Esegue una query su un oggetto PagingSource e archivia il risultato.
Livello UI
L'API principale dell'interfaccia utente di Paging è collectAsLazyPagingItems(). Espone gli elementi impaginati come un elenco di dati che può essere facilmente utilizzato dai componenti di layout lazy di Compose, come LazyColumn e LazyRow.
Aggiungi la libreria androidx.paging:paging-compose per utilizzare le API compatibili con Compose che consentono alla UI di reagire automaticamente a caricamenti, aggiornamenti ed errori dei dati senza la necessità di adattatori o logica di differenziazione. Utilizza la funzione di estensione collectAsLazyPagingItems() su un Flow<PagingData> per passare l'oggetto LazyPagingItems restituito a items() in 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() } } } }
Per saperne di più, consulta Set di dati di grandi dimensioni (impaginazione).
Consigliati per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Carica e visualizza i dati impaginati
- Esegui la migrazione a Paging 3
- Paginazione da rete e database