Ringkasan library paging Bagian dari Android Jetpack.
Library Paging membantu Anda memuat dan menampilkan halaman data dari set data yang lebih besar dari penyimpanan lokal atau melalui jaringan. Pendekatan ini memungkinkan aplikasi Anda menggunakan bandwidth jaringan dan resource sistem secara lebih efisien. Komponen library Paging didesain agar sesuai dengan arsitektur aplikasi Android yang direkomendasikan, terintegrasi rapi dengan komponen Jetpack lainnya, dan menyediakan dukungan kelas satu untuk Kotlin.
Manfaat menggunakan library Paging
Library Paging mencakup fitur berikut:
- Cache dalam memori untuk data Anda yang dibagi-bagi. Hal ini membantu memastikan bahwa aplikasi Anda menggunakan resource sistem secara efisien saat menangani data yang dibagi-bagi.
- Penghapusan duplikat permintaan bawaan, yang membantu memastikan aplikasi Anda menggunakan bandwidth jaringan dan resource sistem secara efisien.
- Dukungan bawaan untuk coroutine Kotlin, flow, dan Jetpack Compose.
- Dukungan bawaan untuk penanganan error, termasuk kemampuan refresh dan percobaan kembali.
- Utilitas pengujian khusus, seperti
TestPagerdanasSnapshot, untuk memverifikasi sumber paging dan transformasi data.
Penyiapan
Untuk mengimpor komponen Paging ke dalam aplikasi Android, tambahkan
dependensi berikut ke file build.gradle aplikasi Anda:
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") }
Groovy
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" }
Arsitektur library
Komponen library Paging beroperasi di tiga lapisan aplikasi Anda:
- Lapisan repositori
- Lapisan
ViewModel - Lapisan UI
Bagian ini menjelaskan komponen library Paging yang beroperasi di setiap lapisan dan cara kerjanya bersama untuk memuat dan menampilkan data yang dibagi-bagi.
Lapisan repositori
Komponen library Paging utama di lapisan repositori adalah
PagingSource. Setiap
objek PagingSource menentukan sumber data dan cara mengambil data dari
sumber tersebut. Objek PagingSource dapat memuat data dari sumber tunggal
mana pun, termasuk sumber jaringan dan database lokal.
Komponen library Paging lain yang mungkin Anda gunakan adalah RemoteMediator. Objek
RemoteMediator menangani paging dari sumber data berlapis, seperti
sumber data jaringan dengan cache database lokal.
Lapisan ViewModel
Komponen Pager menyediakan API publik untuk membuat instance
PagingData yang terekspos dalam aliran reaktif, berdasarkan objek PagingSource
dan objek konfigurasi PagingConfig.
Komponen yang menghubungkan lapisan ViewModel ke UI adalah
PagingData. Objek PagingData adalah penampung untuk snapshot data yang telah dipaginasi. Metode ini mengkueri objek PagingSource dan menyimpan hasilnya.
Lapisan UI
API UI Paging utama adalah collectAsLazyPagingItems(). Library ini mengekspos item
yang di-page sebagai daftar data yang dapat dengan mudah digunakan oleh komponen tata letak lambat
Compose, seperti LazyColumn dan LazyRow.
Tambahkan library androidx.paging:paging-compose untuk menggunakan API yang kompatibel dengan Compose
yang memungkinkan UI otomatis bereaksi terhadap pemuatan, update, dan error data tanpa
memerlukan adaptor atau logika diffing. Gunakan
fungsi ekstensi collectAsLazyPagingItems() di Flow<PagingData>
untuk meneruskan LazyPagingItems yang ditampilkan ke items() di 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() } } } }
Untuk mengetahui informasi selengkapnya, lihat Set data besar (paging).
Direkomendasikan untuk Anda
- Catatan: teks link ditampilkan saat JavaScript nonaktif
- Memuat dan menampilkan data yang dibagi-bagi
- Bermigrasi ke Paging 3
- Halaman dari jaringan dan database