Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Paging

Library Paging memudahkan Anda memuat data secara bertahap dan tanpa masalah di RecyclerView aplikasi.
Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
19 Agustus 2020 2.1.2 - - 3.0.0-alpha05

Mendeklarasikan dependensi

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

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

    dependencies {
      def paging_version = "2.1.2"

      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 mengetahui informasi tentang penggunaan ekstensi Kotlin, baca dokumentasi ktx.

Atau, Anda dapat mencoba rilis alfa Paging 3.0. Untuk menggunakan Paging 3.0, tambahkan dependensi berikut ke file build.gradle:

dependencies {
  def paging_version = "3.0.0-alpha05"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"
}

Untuk informasi dependensi selengkapnya, lihat Menambahkan Dependensi Build.

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau memiliki ide untuk meningkatkan kualitas library ini. Harap lihat masalah yang ada di library ini sebelum Anda membuat laporan baru. Anda dapat memberikan suara pada laporan yang ada dengan mengklik tombol bintang.

Melaporkan masalah baru

Lihat dokumentasi Issue Tracker untuk mengetahui informasi selengkapnya.

Versi 3.0.0

Versi 3.0.0-alpha05

19 Agustus 2020

androidx.paging:paging-*:3.0.0-alpha05 dirilis. Versi 3.0.0-alpha05 berisi commit berikut ini.

Perbaikan Bug

  • Kini paging mengambil data halaman dengan benar meskipun data yang disajikan memiliki banyak filter
  • Mengembalikan LoadResult.Error ke pemuatan yang dicoba ulang tidak lagi menyebabkan akses Item salah memicu kembali percobaan ulang

Kontribusi Eksternal

  • Terima kasih kepada Clara F yang telah membantu membereskan beberapa pengujian (549612)

Versi 3.0.0-alpha04

5 Agustus 2020

androidx.paging:paging-*:3.0.0-alpha04 dirilis. Versi 3.3.0-alpha04 berisi commit berikut.

Perubahan API

  • Menambahkan peek() API ke AsyncPagingDataDiffer dan PagingDataAdapter untuk memungkinkan akses data yang disajikan tanpa memicu pemuatan halaman. (I38898, b/159104197)
  • Menambahkan snapshot() API ke PagingDataAdapter dan AsyncPagingDataDiffer untuk memungkinkan pengambilan item yang disajikan tanpa memicu pengambilan halaman. (I566b6, b/159104197)
  • Menambahkan konstruktor PagingData.from(List<T>) untuk memungkinkan penyajian daftar statis, yang dapat digabungkan dengan alur PagingData keseluruhan untuk menampilkan daftar statis di status tertentu, misalnya sebelum REFRESH awal selesai atau hanya untuk menguji transformasi. (Id134d)
  • Menghentikan dataRefresh Flow/Listener API karena ini ditujukan untuk mengekspos status item yang ditampilkan pada REFRESH. Namun dengan perbaikan pada pengaturan waktu callback loadState Flow/Listener, dan properti itemCount, API ini tidak diperlukan lagi (Ia19f3)
  • Menambahkan wrapper kompatibilitas RxJava3 untuk PagingSource dan RemoteMediator (I49ef3, b/161480176)

Perbaikan Bug

  • PositionalDataSource dikonversi menjadi PagingSource melalui helper toPagingSourceFactory, termasuk PagingSource yang dihasilkan oleh Room sekarang telah menandai dirinya dengan benar untuk mendukung jumping. (I3e84c, b/162161201)
  • Perbaikan bug untuk masalah penggunaan varian submitData sinkron yang terkadang menimbulkan race yang menyebabkan ClosedSendChannelException (I4d702, b/160192222)

Kontribusi Eksternal

  • Terima kasih kepada Zac Sweers karena telah menambahkan wrapper kompatibilitas RxJava3 mewakili Slack! (I49ef3, b/161480176)

Versi 3.0.0-alpha03

22 Juli 2020

androidx.paging:paging-*:3.0.0-alpha03 dirilis. Versi 3.0.0-alpha03 berisi commit berikut ini.

Perubahan API

  • Konstruktor untuk PagingState sekarang bersifat publik, sehingga seharusnya mempermudah implementasi pengujian getRefreshKey() (I8bf15)
  • Varian fungsi peta kotlin DataSource disembunyikan dari Java untuk mengatasi masalah ambiguitas antara varian asli dan varian kotlin. (If7b23, b/161150011)
  • API redundan yang ditujukan untuk memudahkan pengguna Kotlin telah ditandai @JvmSynthetic (I56ae5)
  • Overload untuk konstruktor LoadResult.Page ditambahkan sehingga COUNT_UNDEFINED menjadi nilai default untuk itemsBefore dan itemsAfter (I47849)
  • Operator PagingData yang sudah ada diubah agar mau menerima metode penangguhan dan operator non-penangguhan mapSync, flatMapSync, dan filterSync baru diperkenalkan untuk pengguna Java. Metode transformasi yang ada telah dipindahkan ke fungsi ekstensi sehingga pengguna Kotlin kini harus mengimpornya. (I34239, b/159983232)

Perbaikan Bug

  • Room (dan PositionalDataSource) PagingSources sekarang menampilkan pemisah utama sebagai bagian dari halaman pertama, sehingga pengguna tidak perlu men-scroll untuk memunculkannya. (I6f747, b/160257628)
  • Pengaksesan item pada placeholder sekarang memicu pemuatan PagingSource dengan benar hingga halaman ditampilkan memenuhi indeks yang diminta setelah diubah oleh PagingData.filter() (I95625, b/158763195)
  • Perbaikan bug yang terkadang dapat mencegah PagingDataAdapter.retry() mencoba lagi jika terjadi scroll setelah muncul pesan error yang dihasilkan PagingSource. (I1084f, b/160194384)
  • Memperbaiki masalah ketika ada kemungkinan pengaksesan item setelah suatu halaman diturunkan ternyata tidak memuat halaman meskipun pengaksesan item tersebut masih berada dalam prefetchDistance (Ie95ae, b/160038730)
  • Setelan PagingConfig.maxSize tidak lagi mengaktifkan placeholder setelah peristiwa penurunan (I2be29, b/159667766)

Versi 3.0.0-alpha02

24 Juni 2020

androidx.paging:paging-*:3.0.0-alpha02 dirilis. Versi 3.3.0-alpha02 berisi commit berikut.

Perubahan API

  • Penambahan overload untuk konstruktor PagingConfig dengan nilai default umum (I39c50, b/158576040)
  • Penambahan overload untuk konstruktor PagingDataAdapter dan AsyncPagingDataDiffer dengan nilai default umum (Ie91f5)
  • API adaptor, dataRefreshFlow, dan dataRefreshListener sekarang meneruskan Boolean untuk memberi sinyal apakah PagingData kosong (I6e37e, b/159054196)
  • Penambahan RxJava dan API Guava untuk RemoteMediator - RxRemoteMediator dan ListenableFutureRemoteMediator
  • Penambahan bantuan ke PagingState untuk pengaksesan item umum seperti isEmpty() dan firstItemOrNull() (I3b5b6, b/158892717)

Perbaikan Bug

  • Pager kini memeriksa penggunaan kembali PagingSource di factory, untuk mencegah penggunaan ulang PagingSource yang tidak valid secara tidak sengaja, sehingga menimbulkan error yang tidak jelas (I99809, b/2284864)
  • Kegagalan dari RemoteMediator REFRESH tidak lagi mencegah pemuatan PagingSource (I38b1b, b/158892717)
  • Versi non-penangguhan submitData tidak lagi menyebabkan error karena pengumpulan serentak pada beberapa PagingData ketika dipanggil setelah versi submitData yang ditangguhkan. (I26358, b/158048877)
  • Memperbaiki pengecualian "tidak dapat dikumpulkan dua kali dari pager" yang dapat terjadi setelah perubahan konfigurasi (I58bcc, b/228784811)

Versi 3.0.0-alpha01

10 Juni 2020

androidx.paging:paging-*:3.0.0-alpha01 dirilis. Versi 3.0.0-alpha01 berisi commit berikut.

Library Paging telah diupdate ke versi 3.0, untuk mengaktifkan beberapa fitur baru.

Fitur Baru Versi 3.0

Masalah Umum

  • Paging 3 javadocs belum tersedia. Untuk sementara, gunakan panduan yang ditautkan di atas atau dokumen Kotlin. (b/158614050)

Versi 2.1.2

Versi 2.1.2

18 Maret 2020

androidx.paging:paging:2.1.2 dirilis. Versi 2.1.2 berisi commit berikut pada 2.1.0.

Perbaikan Bug

  • Perbaikan untuk IndexOutOfBoundsException dalam kasus yang jarang terjadi saat mengonversi posisi selama pembatalan.

Masalah rilis

  • Versi Paging 2.1.1 dirilis secara tidak benar dari cabang yang salah dikonfigurasi, sehingga mengekspos API dan fungsionalitas yang diimplementasikan sebagian dalam rilis mendatang.

  • Paging 2.1.2 berisi perbaikan pemusatan muatan yang awalnya dirilis pada 2.1.1, tetapi kali ini dipilih lebih teliti berdasarkan rilis 2.1.0. Sebaiknya Anda mengupgrade ke rilis ini, jika saat ini Anda menggunakan 2.1.1.

Versi 2.1.1

Versi 2.1.1

18 Desember 2019

androidx.paging:paging-*:2.1.1 dirilis. Versi 2.1.1 berisi commit berikut.

Perbaikan bug

  • Pemuatan awal yang berdekatan dari PositionalDataSources kini terpusat di sekitar akses terakhir saat placeholder dinonaktifkan

Versi 2.1.0

Versi 2.1.0

25 Januari 2019

Paging 2.1.0 dirilis tanpa perubahan dari versi 2.1.0-rc01.

Versi 2.1.0-rc01

6 Desember 2018

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

Versi 2.1.0-beta01

1 November 2018

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

Versi 2.1.0-alpha01

12 Oktober 2018

Paging 2.1.0-alpha01 kini memiliki page dropping, dan library ekstensi KTX untuk setiap artefak, selain beberapa perubahan API dan perbaikan bug lainnya.

Perubahan API

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

Perbaikan Bug

  • Perbaikan kondisi race saat melakukan diffing jika daftar digunakan kembali b/111591017
  • PagedList.loadAround() sekarang menampilkan IndexOutOfBoundsException jika indeks tidak valid. Sebelumnya, masalah dapat terjadi dengan pengecualian lain yang tidak jelas.
  • Perbaikan masalah ketika ukuran pemuatan awal yang sangat kecil dan data yang tidak berubah berpotensi menghentikan pemuatan lebih lanjut. b/113122599

Versi 2.0.0

Versi 2.0.0

1 Oktober 2018

Paging 2.0.0 dirilis dengan satu perbaikan bug.

Perbaikan Bug

  • Perbaikan 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

  • Perbaikan konten yang hilang dalam beberapa kasus terdahulu (placeholder dinonaktifkan, PositionalDataSource) b/80149146
  • (Sudah dirilis dalam 1.0.1) Perbaikan error ketika PagedListAdapter dan AsyncPagedListDiffer gagal menandai 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

Versi 1.0.1

26 Juni 2018

Paging 1.0.1 dirilis dengan satu perbaikan bug di runtime. Kami sangat menganjurkan penggunaan 1.0.1 demi stabilitas. Paging RxJava2 1.0.1 juga dirilis, dan identik dengan 1.0.0-rc1.

Perbaikan Bug

  • Perbaikan error ketika PagedListAdapter dan AsyncPagedListDiffer gagal menandai peristiwa pemindahan. b/110711937

Versi RxJava2 1.0.0

Versi RxJava2 1.0.0-rc1

16 Mei 2018

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

Versi 1.0.0

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. Harap upgrade project untuk menggunakan 1.0.0-rc1 dan bantu kami melakukan uji banding agar dapat merilis 1.0.0 yang sempurna.

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

Versi 1.0.0-beta01

5 April 2018

Paging akan berada dalam versi beta untuk waktu yang singkat sebelum menjadi kandidat rilis. Tidak ada rencana perubahan API lebih lanjut untuk Paging 1.0, dan standar untuk setiap perubahan API sangatlah tinggi.

Dukungan RxJava2 alfa 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 memberikan alternatif RxJava2 untuk LivePagedListBuilder, yang mampu merancang Observable dan Flowable, menggunakan 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 baru.

Perubahan API

  • Perubahan API untuk memperjelas peran eksekutor dalam builder:

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

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

  • Memperbaiki anggota PagedList.mCallbacks menjadi pribadi.

Perbaikan Bug

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

  • Perbaikan perilaku pembatalan validasi dalam 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 bersama Lifecycle 1.1.1. Karena Paging alfa7 bergantung pada pemindahan class Function sebagaimana disebutkan di atas, Anda harus mengupdate dependensi lifecycle:runtime 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 konstruktor publik, dan objek DataSource.LoadCallback sekarang bersifat abstrak. Perubahan ini memungkinkan penggabungan DataSource atau pengujian DataSource secara langsung dengan callback palsu. b/72600421
  • Mapper untuk DataSource dan DataSource.Factory
    • map(Function<IN,OUT>) memungkinkan Anda mengubah, menggabungkan, atau mendekorasi hasil yang dimuat DataSource.
    • mapByPage(<List<IN>,List<OUT>>) memungkinkan tindakan yang sama untuk batch processing (misalnya, jika item yang dimuat dari SQL harus mengkueri database terpisah, hal tersebut dapat dilakukan sebagai batch.)
  • PagedList#getDataSource() ditambahkan sebagai metode yang mempermudah pekerjaan 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 class abstrak guna memungkinkan fungsi pemetaan.

Perbaikan Bug

  • Pengubahan Builder menjadi final. b/70848565
  • Perbaikan implementasi DataSource Room untuk menangani kueri multitabel. Perbaikan ini disertakan dalam Room 1.1.0-beta1, lihat di atas.
  • Perbaikan bug yang menyebabkan BoundaryCallback.onItemAtEndLoaded tidak dipanggil untuk PositionalDataSource jika placeholder diaktifkan dan ukuran total merupakan kelipatan persis 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