Paging

Library Paging memudahkan Anda memuat data secara bertahap dan lancar di dalam RecyclerView aplikasi Anda. Lihat dokumen referensi untuk informasi selengkapnya.

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada Paging, Anda harus menambahkan repositori Google Maven ke project Anda. Baca repositori Google Maven untuk informasi selengkapnya.

Tambahkan dependensi untuk artefak yang Anda perlukan dalam file build.gradle untuk aplikasi atau modul Anda:

    dependencies {
      def paging_version = "2.1.0"

      implementation "androidx.paging:paging-runtime:$paging_version" // For Kotlin use paging-runtime-ktx

      // alternatively - without Android dependencies for testing
      testImplementation "androidx.paging:paging-common:$paging_version" // For Kotlin use paging-common-ktx

      // optional - RxJava support
      implementation "androidx.paging:paging-rxjava2:$paging_version" // For Kotlin use paging-rxjava2-ktx
    }
    

Untuk informasi tentang cara menggunakan ekstensi Kotlin, lihat dokumentasi ktx.

Untuk informasi selengkapnya tentang dependensi, lihat Menambahkan Dependensi Build.

Versi 2.1.0

25 Januari 2019

Paging 2.1.0 dirilis tanpa perubahan dari 2.1.0-rc01.

Versi 2.1.0-rc01

6 Desember 2018

Paging 2.1.0-rc01 dirilis tanpa perubahan dari 2.1.0-beta01.

Versi 2.1.0-beta01

1 November 2018

Paging 2.1.0-beta01 dirilis tanpa perubahan dari 2.1.0-alpha01.

Versi 2.1.0-alpha01

12 Oktober 2018

Paging 2.1.0-alpha01 mendapatkan dua tambahan utama - page dropping, dan library ekstensi KTX untuk setiap artefak - selain beberapa perubahan API dan perbaikan bug lainnya.

Perubahan API

  • Menambahkan PagedList.Config.Builder.setMaxSize() untuk membatasi jumlah item yang dimuat dalam memori.
  • Menambahkan androidx.paging.Config() sebagai alternatif Kotlin untuk PagedList.Config.Builder
  • Menambahkan androidx.paging.PagedList() sebagai alternatif Kotlin untuk PagedList.Builder
  • Menambahkan DataSourceFactory.toLiveData() sebagai alternatif Kotlin untuk LivePagedListBuilder
  • Menambahkan DataSourceFactory.toObservable() dan toFlowable() sebagai alternatif Kotlin untuk RxPagedListBuilder
  • Menambahkan AsyncPagedListDiffer.addPagedListListener() untuk dipantau saat PagedList ditukar. b/111698609
  • Menambahkan varian PagedListAdapter.onCurrentListChanged() yang meneruskan daftar lama dan baru, varian sebelumnya tidak digunakan lagi.
  • Menambahkan varian PagedListAdapter/AsyncPagedListDiffer.submitList() yang mengambil callback tambahan yang terpicu jika/ketika pagedlist ditampilkan, setelah diffing. Ini memungkinkan Anda untuk menyinkronkan swap PagedList dengan update UI lainnya. b/73781068
  • Menambahkan PagedList.getLoadedCount() untuk memberitahukan banyaknya item dalam memori. Perhatikan bahwa nilai yang ditampilkan selalu sama dengan .size() jika placeholder dinonaktifkan.

Perbaikan Bug

  • Memperbaiki kondisi race saat melakukan diffing jika daftar digunakan kembali b/111591017
  • PagedList.loadAround() sekarang menampilkan IndexOutOfBoundsException saat indeks tidak valid. Sebelumnya, masalah dapat terjadi dengan pengecualian lain yang tidak jelas.
  • Memperbaiki kasus di mana ukuran pemuatan awal yang sangat kecil bersama dengan data yang tidak berubah tidak akan menghasilkan pemuatan lebih lanjut b/113122599

Versi 2.0.0

1 Oktober 2018

Paging 2.0.0 dirilis dengan perbaikan bug tunggal.

Perbaikan Bug

  • Memperbaiki error yang dapat terjadi pada scroll yang sangat cepat menggunakan PositionalDataSource dan placeholder. b/114635383.

Versi 2.0.0-beta01

2 Juli 2018

Perbaikan Bug

  • Memperbaiki konten yang hilang dalam beberapa kasus tambahan (placeholder dinonaktifkan, PositionalDataSource) b/80149146
  • (Telah dirilis di 1.0.1) Memperbaiki error di mana PagedListAdapter dan AsyncPagedListDiffer gagal untuk memberi sinyal peristiwa pemindahan. b/110711937

Dependensi Pra-AndroidX

Untuk Paging versi pra-AndroidX, sertakan dependensi berikut:

dependencies {
        def paging_version = "1.0.0"

        implementation "android.arch.paging:runtime:$paging_version"

        // alternatively - without Android dependencies for testing
        testImplementation "android.arch.paging:common:$paging_version"

        // optional - RxJava support
        implementation "android.arch.paging:rxjava2:$paging_version"
    }
    

Versi 1.0.1

26 Juni 2018

Paging 1.0.1 dirilis dengan perbaikan bug tunggal pada runtime. Kami sangat menyarankan menggunakan 1.0.1 untuk stabilitas. Paging RxJava2 1.0.1 juga dirilis, dan identik dengan 1.0.0-rc1.

Perbaikan Bug

  • Memperbaiki error di mana PagedListAdapter dan AsyncPagedListDiffer gagal untuk memberi sinyal peristiwa pemindahan. b/110711937

Versi RxJava2 1.0.0-rc1

16 Mei 2018

Paging RxJava2 1.0.0-rc1 beralih ke kandidat rilis tanpa perubahan dari alfa awal.

Versi 1.0.0-rc1

19 April 2018 Kandidat Rilis Paging

Kami tidak memiliki masalah umum atau fitur baru lagi yang dijadwalkan untuk rilis Paging 1.0.0. Silakan upgrade project Anda untuk menggunakan 1.0.0-rc1 dan bantu kami melakukan uji banding agar kami dapat merilis 1.0.0 yang solid.

Tidak ada perubahan dalam rilis ini, sama dengan 1.0.0-beta1.

Versi 1.0.0-beta01

5 April 2018

Paging akan berada dalam vesi beta untuk waktu yang singkat sebelum menjadi kandidat rilis. Kami tidak merencanakan perubahan API lebih lanjut untuk Paging 1.0, dan batasan untuk setiap perubahan API sangat tinggi.

Dukungan Alfa RxJava2 untuk Paging dirilis sebagai modul opsional terpisah android.arch.paging:rxjava2:1.0.0-alpha1 dan akan diberi versi sementara secara terpisah sampai stabil.

Library baru ini akan menyediakan alternatif RxJava2 untuk LivePagedListBuilder, yang mampu membuat Observable dan Flowable, dan mengambil Scheduler bukannya Executor:

Kotlin

    val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
            .setFetchScheduler(myNetworkScheduler)
            .buildObservable()
    

Java

    Observable<PagedList<Item>> pagedItems =
            RxPagedListBuilder(myDataSource, /* page size */ 50)
                    .setFetchScheduler(myNetworkScheduler)
                    .buildObservable();
    

Fitur Baru

  • RxPagedListBuilder ditambahkan melalui artefak android.arch.paging:rxjava2.

Perubahan API

  • Perubahan API untuk memperjelas peran pelaksana dalam pembuat:

    • Mengganti nama setBackgroundThreadExecutor() menjadi setFetchExecutor() (di PagedList.Builder dan LivePagedListBuilder)

    • Mengganti nama setMainThreadExecutor() menjadi setNotifyExecutor() (di PagedList.Builder).

  • Memperbaiki anggota PagedList.mCallbacks menjadi pribadi.

Perbaikan Bug

  • LivePagedListBuilder memicu pemuatan PagedList awal pada eksekutor yang ditentukan, bukan pool thread IO Komponen Arch.

  • Memperbaiki perilaku pembatalan pada wrapper DataSource internal (yang digunakan untuk mengimplementasikan DataSource.map, serta pemuatan PositionalDataSource yang dinonaktifkan placeholder). b/77237534

Versi 1.0.0-alpha7

21 Maret 2018

Paging 1.0.0-alpha7 dirilis bersamaan dengan Lifecycle 1.1.1. Karena Paging alpha7 bergantung pada pemindahan kelas Function sebagaimana disebutkan di atas, Anda harus mengupdate dependensi lifecycle:runtime Anda ke android.arch.lifecycle:runtime:1.1.1.

Paging alpha7 direncanakan menjadi rilis final sebelum Paging mencapai beta.

Perubahan API

  • Objek DataSource.LoadParams sekarang memiliki constructor publik dan objek DataSource.LoadCallback sekarang abstrak. Ini memungkinkan untuk menggabungkan DataSource atau langsung menguji DataSource dengan callback palsu. b/72600421
  • Pemetaan untuk DataSource dan DataSource.Factory
    • map(Function<IN,OUT>) memungkinkan Anda untuk mentransformasi, menggabungkan, atau mendekorasi hasil yang dimuat oleh DataSource.
    • mapByPage(<List<IN>,List<OUT>>) memungkinkan hal yang sama untuk batch processing (misalnya jika item yang dimuat dari SQL juga perlu mengkueri database terpisah, yang dapat dilakukan sebagai sebuah batch.)
  • PagedList#getDataSource() ditambahkan sebagai metode kenyamanan. b/72611341
  • Semua class yang tidak digunakan lagi telah dihapus dari API, termasuk sisa-sisa paket recyclerview.extensions dan LivePagedListProvider.
  • DataSource.Factory diubah dari antarmuka menjadi kelas abstrak guna memungkinkan fungsi pemetaan.

Perbaikan Bug

  • Mengubah Pembuat menjadi final. b/70848565
  • Implementasi DataSource Room sekarang tetap untuk menangani kueri multi-tabel - perbaikan ini disertakan pada Room 1.1.0-beta1, lihat di atas.
  • Memperbaiki bug di mana BoundaryCallback.onItemAtEndLoaded tidak akan dipanggil untuk PositionalDataSource jika placeholder diaktifkan dan total ukuran merupakan kelipatan persis dari ukuran halaman.

Versi 1.0.0-alpha5

22 Januari 2018

Perbaikan Bug

  • Perbaikan pemuatan halaman saat placeholder dinonaktifkan b/70573345
  • Logging tambahan untuk melacak bug IllegalArgumentException b/70360195 (dan perbaikan sisi Room spekulatif)
  • Perbaikan kode contoh Javadoc. b/70411933, b/71467637