Übersicht über die Paging-Bibliothek Teil von Android Jetpack
Mit der Paging-Bibliothek können Sie Seiten mit Daten aus einem größeren Datensatz aus dem lokalen Speicher oder über ein Netzwerk laden und anzeigen. So kann Ihre App sowohl die Netzwerkbandbreite als auch die Systemressourcen effizienter nutzen. Die Komponenten der Paging-Bibliothek sind so konzipiert, dass sie in die empfohlene Android-App-Architektur passen, sich nahtlos in andere Jetpack-Komponenten einfügen und erstklassige Kotlin-Unterstützung bieten.
Vorteile der Verwendung der Paging-Bibliothek
Die Paging-Bibliothek umfasst die folgenden Funktionen:
- In-Memory-Caching für Ihre paginierten Daten. So wird sichergestellt, dass Ihre App Systemressourcen effizient nutzt, wenn sie mit paginierten Daten arbeitet.
- Integrierte Deduplizierung von Anfragen, die dazu beiträgt, dass Ihre App Netzwerkbandbreite und Systemressourcen effizient nutzt.
- Erstklassige Unterstützung für Kotlin-Coroutinen und -Flows.
- Integrierte Unterstützung für die Fehlerbehandlung, einschließlich Aktualisierungs- und Wiederholungsfunktionen.
Einrichtung
Wenn Sie Paging-Komponenten in Ihre Android-App importieren möchten, fügen Sie der Datei build.gradle Ihrer App die folgenden Abhängigkeiten hinzu:
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" }
Bibliotheksarchitektur
Die Komponenten der Paging-Bibliothek sind in drei Ebenen Ihrer App tätig:
- Repository-Ebene
- Die Ebene
ViewModel - UI-Ebene
In diesem Abschnitt werden die Komponenten der Paging-Bibliothek beschrieben, die auf jeder Ebene ausgeführt werden, und wie sie zusammenarbeiten, um seitenweise Daten zu laden und anzuzeigen.
Repository-Ebene
Die primäre Paging-Bibliothekskomponente in der Repository-Ebene ist PagingSource. Jedes PagingSource-Objekt definiert eine Datenquelle und gibt an, wie Daten aus dieser Quelle abgerufen werden. Mit einem PagingSource-Objekt können Daten aus einer beliebigen Quelle geladen werden, einschließlich Netzwerkquellen und lokaler Datenbanken.
Eine weitere Komponente der Paging-Bibliothek, die Sie möglicherweise verwenden, ist RemoteMediator. Ein RemoteMediator-Objekt verarbeitet das Paging aus einer mehrschichtigen Datenquelle, z. B. einer Netzwerkdatenquelle mit einem lokalen Datenbankcache.
ViewModel-Ebene
Die Komponente Pager bietet eine öffentliche API zum Erstellen von Instanzen von PagingData, die in reaktiven Streams verfügbar sind. Die Erstellung basiert auf einem PagingSource-Objekt und einem PagingConfig-Konfigurationsobjekt.
Die Komponente, die die ViewModel-Ebene mit der Benutzeroberfläche verbindet, ist PagingData. Ein PagingData-Objekt ist ein Container für einen Snapshot von paginierten Daten. Es wird ein PagingSource-Objekt abgefragt und das Ergebnis wird gespeichert.
UI-Ebene
Die primäre Paging-UI-API ist collectAsLazyPagingItems(). Sie stellt ausgelagerte Elemente als Liste von Daten bereit, die von den Lazy-Layout-Komponenten von Compose wie LazyColumn und LazyRow einfach verwendet werden können.
Fügen Sie die androidx.paging:paging-compose-Bibliothek hinzu, um Compose-kompatible APIs zu verwenden, mit denen die Benutzeroberfläche automatisch auf Datenladevorgänge, Aktualisierungen und Fehler reagieren kann, ohne dass Adapter oder Differenzierungslogik erforderlich sind. Verwenden Sie die Erweiterungsfunktion collectAsLazyPagingItems() für einen Flow<PagingData>, um den zurückgegebenen LazyPagingItems in einem LazyColumn an items() zu übergeben.
@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() } } } }
Weitere Informationen finden Sie unter Große Datasets (Paging).
Empfehlungen für Sie
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Paginierte Daten laden und anzeigen
- Zu Paging 3 migrieren
- Seite aus Netzwerk und Datenbank