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 kelas satu untuk coroutine dan flow Kotlin.
  • Dukungan bawaan untuk penanganan error, termasuk kemampuan refresh dan percobaan kembali.

Penyiapan

Untuk mengimpor komponen Paging ke dalam aplikasi Android, tambahkan dependensi berikut ke file build.gradle aplikasi Anda:

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"
}

Arsitektur library

Komponen library Paging beroperasi di tiga lapisan aplikasi Anda:

  • Lapisan repositori
  • Lapisan ViewModel
  • Lapisan UI
Gambar yang menunjukkan aliran data yang dibagi-bagi dari komponen PagingSource atau RemoteMediator di lapisan repositori ke komponen Pager di lapisan ViewModel.
    Selanjutnya, komponen Pager menampilkan Aliran PagingData ke
    komponen tata letak lambat di lapisan UI.
Gambar 1. Contoh cara library Paging menyesuaikan arsitektur aplikasi Anda.

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 dapat 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. Objek ini akan meminta objek PagingSource dan menyimpan hasilnya.

Lapisan UI

API UI Paging utama adalah collectAsLazyPagingItems(). Objek ini mengekspos item yang di-paging 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 bereaksi secara otomatis terhadap pemuatan, pembaruan, dan error data tanpa memerlukan adapter atau logika perbedaan. Gunakan fungsi ekstensi collectAsLazyPagingItems() di Flow<PagingData> untuk meneruskan LazyPagingItems yang ditampilkan ke items() dalam 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).