Paging
Tabel ini mencantumkan semua artefak dalam grup androidx.paging.
| Artefak | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa |
|---|---|---|---|---|
| paging-* | 3.3.6 | - | - | 3.4.0-alpha04 |
| paging-compose | 3.3.6 | - | - | 3.4.0-alpha04 |
Mendeklarasikan dependensi
Untuk menambahkan dependensi pada Paging, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk mengetahui informasi selengkapnya.
Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle bagi
aplikasi atau modul Anda:
Groovy
dependencies { def paging_version = "3.3.6" 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 - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.4.0-alpha04" }
Kotlin
dependencies { val paging_version = "3.3.6" 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 - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.4.0-alpha04") }
Untuk informasi cara menggunakan ekstensi Kotlin, lihat dokumentasi ktx.
Untuk informasi selengkapnya tentang dependensi, lihat Menambahkan Dependensi Build.
Masukan
Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.
Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.
Versi 3.4
Versi 3.4.0-alpha04
10 September 2025
androidx.paging:paging-*:3.4.0-alpha04 dirilis. Versi 3.4.0-alpha04 berisi commit ini.
Perubahan API
- Menambahkan
PagingStateAPIclosestItemAroundPositionbaru untuk mengambil item yang dimuat yang paling dekat dengan posisi target dan cocok dengan predikat input. Hal ini dapat digunakan untuk membuat kunci penggantian berbasis item saat item yang dapat di-anchor ideal berada di sekitar, tetapi tidak pada posisi target yang tepat. (I96e5c, b/440187139)
Versi 3.4.0-alpha03
27 Agustus 2025
androidx.paging:paging-*:3.4.0-alpha03 dirilis. Versi 3.4.0-alpha03 berisi commit ini.
Fitur Baru
- Paging-common telah menambahkan desktop sebagai target Multiplatform Kotlin (KMP) baru. Secara total, kini mendukung JVM(Android dan Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW), dan Web (JavaScript, WasmJS). (Id2483, b/436884811)
- Pengujian penomoran halaman telah menambahkan target Kotlin Multiplatform (KMP) baru. Secara total, kini mendukung JVM(Android dan Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW), dan Web (JavaScript, WasmJS). (I0c543, b/435014650)
- Paging-compose telah menambahkan target Multiplatform Kotlin (KMP) baru. Secara total, kini mendukung JVM(Android dan Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW), dan Web (JavaScript, WasmJS). (I70d44, b/436884801)
Perubahan API
- Memindahkan minSdk default dari API 21 ke API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
Versi 3.4.0-alpha02
30 Juli 2025
androidx.paging:paging-*:3.4.0-alpha02 dirilis. Versi 3.4.0-alpha02 berisi commit ini.
Perubahan API
PagingData.fromsekarang memungkinkan setelanplaceholdersBeforedanplaceholdersAfter. Perhatikan bahwa men-scroll melalui placeholder ini tidak memicu pemuatan. (I06983)
Versi 3.4.0-alpha01
2 Juli 2025
androidx.paging:paging-*:3.4.0-alpha01 dirilis. Versi 3.4.0-alpha01 berisi commit ini.
Fitur Baru
- Paging telah menambahkan target KMP berikut: watchos, tvos, mingwX64, watchosDeviceArm64, dan linuxArm64. (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
Perbaikan Bug
- Pengujian unit Android yang menarik Paging 3.3 atau yang lebih baru tidak akan lagi mengalami pengecualian dari
PagingLogger(Ia9400, b/331684448) - Memperbaiki bug saat
RecyclerViewmemunculkanIndexOutOfBoundsExceptionsaat pengguna men-scroll sambil memperbaruiRecyclerView(Id1f16, b/381024738) - Memperbaiki bug yang menyebabkan penomoran halaman tidak dapat memicu lebih banyak pemuatan saat memuat ulang sambil men-scroll. (I60ca5, b/352586078)
- Memperbaiki error saat men-scroll sambil memuat ulang item Penomoran halaman. (I8c65a, b/347649763)
Versi 3.3
Versi 3.3.6
12 Februari 2025
androidx.paging:paging-*:3.3.6 dirilis. Versi 3.3.6 berisi commit ini.
Perbaikan Bug
- Sinyal muat ulang dan coba lagi yang dikirim selama Muat Ulang awal kini akan disimpan dan dikirim ulang secara otomatis setelah presenter Penomoran Halaman siap.
Kontribusi Eksternal
Versi 3.3.5
11 Desember 2024
androidx.paging:paging-*:3.3.5 dirilis. Versi 3.3.5 berisi commit ini.
Perbaikan Bug
- Memperbaiki bug yang menyebabkan
RecyclerViewmenampilkanIndexOutOfBoundsExceptionsaat pengguna men-scroll sambil memperbaruiRecyclerView. (Id1f16, b/381024738)
Versi 3.3.4
13 November 2024
androidx.paging:paging-*:3.3.4 dirilis. Versi 3.3.4 berisi commit ini.
Perbaikan Bug
- Pengujian unit Android yang menarik Paging 3.3 atau yang lebih baru tidak akan lagi memunculkan error seperti
Method isLoggable in android.util.Log not mocked. (Ia9400, b/331684448)
Versi 3.3.2
7 Agustus 2024
androidx.paging:paging-*:3.3.2 dirilis. Versi 3.3.2 berisi commit ini.
Fitur Baru
paging-commondanpaging-testingtelah menambahkan target Kotlin Multiplatform baru:watchos,tvos, danlinuxArm64(90c9768), (53e0eca)
Versi 3.3.1
24 Juli 2024
androidx.paging:paging-*:3.3.1 dirilis. Versi 3.3.1 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah saat
AsyncPagingDataDifferatau API yang dibangun di atasnya sepertiPagingDataAdapteryang digunakan denganRecyclerViewtidak dapat memicu lebih banyak pemuatan saat sumber data pendukung dimuat ulang saat men-scroll. (I60ca5, b/352586078) - Memperbaiki error yang terjadi saat item dihapus dari sumber data pendukung saat men-scroll
RecyclerViewmenggunakanPagingDataAdapteratauAsyncPagingDataDiffer. (I8c65a, b/347649763)
Versi 3.3.0
14 Mei 2024
androidx.paging:paging-*:3.3.0 dirilis. Versi 3.3.0 berisi commit ini.
Perubahan penting sejak versi 3.2.0
PagingDataPresenterkini menjadi class publik. Presenter multiplatform kini dapat dibangun di atasPagingDataPresenter, bukan memerlukan API Paging internal atauAsyncPagingDataDifferpaging-runtime.- Menambahkan metode helper
LoadStatesdanCombinedLoadStatesbaru dihasErrordanisIdleuntuk memeriksa apakahLoadStatesdalam status Error atauNotLoading. Menambahkan juga metode ekstensi KotlinawaitNotLoading()baru diFlow<CombinedLoadStates>yang menunggu hingga pemuatan diselesaikan ke dalam statusNotLoadingatau Error. PagingData.empty()kini mengirimkan statusNotLoadingsecara default, kecuali jikaLoadStateskustom diteruskan ke konstruktornya. Hal ini berbeda dari perilaku yang ada yang tidak mengirimkanLoadStatessaat dikirimkan kePagingDataAdapteratau mengirimkan status Pemuatan saat dikumpulkan sebagaiLazyPagingItems. Saat dikumpulkan sebagaiLazyPagingItems, daftar kosong juga akan ditampilkan segera setelah komposisi awal.
Kompatibilitas Multiplatform Kotlin
Paging kini mengirimkan artefak yang kompatibel dengan Multiplatform Kotlin, sebagian besar berkat pekerjaan yang di-upstream dari project multiplatform-paging CashApp.
paging-commontelah memindahkan semua Paging 3 API kecommondan kini kompatibel dengan jvm dan iOS selain Android.paging-testingtelah memindahkan kodenya kecommondan kini kompatibel dengan jvm dan iOS selain Android.paging-composetelah memindahkan kodenya kecommondan mengirimkan artefak Android, yang cocok dengan dukungan multiplatformandroidx.compose.paging-runtime,paging-guava,paging-rxjava2, danpaging-rxjava3akan tetap khusus Android.
Versi 3.3.0-rc01
1 Mei 2024
androidx.paging:paging-*:3.3.0-rc01 dirilis tanpa perubahan di Paging 3.3.0-beta01. Versi 3.3.0-rc01 berisi commit ini.
Versi 3.3.0-beta01
3 April 2024
androidx.paging:paging-*:3.3.0-beta01 dirilis tanpa perubahan penting. Versi 3.3.0-beta01 berisi commit ini.
Versi 3.3.0-alpha05
20 Maret 2024
androidx.paging:paging-*:3.3.0-alpha05 dirilis. Versi 3.3.0-alpha05 berisi commit ini.
Perubahan API
- Paging kini menggunakan anotasi
@MainThreadAndroidX Annotation untuk kode umum. (I78f0d, b/327682438)
Versi 3.3.0-alpha04
6 Maret 2024
androidx.paging:paging-*:3.3.0-alpha04 dirilis. Versi 3.3.0-alpha04 berisi commit ini.
Perbaikan Bug
- Memperbaiki error dokumentasi kecil terkait penambahan kompatibilitas multiplatform Kotlin. (aosp/2950785)
Versi 3.3.0-alpha03
7 Februari 2024
androidx.paging:paging-*:3.3.0-alpha03 dirilis. Versi 3.3.0-alpha03 berisi commit ini.
Fitur Baru
PagingDataPresenterkini menjadi class publik. Presenter multiplatform kini dapat dibangun di atasPagingDataPresenter, bukan memerlukan API Paging internal atauAsyncPagingDataDifferpaging-runtime. (Id1f74, b/315214786)- Menambahkan metode helper
LoadStatesdanCombinedLoadStatesbaru untuk memeriksa apakahLoadStatesdalam status Error atauNotLoading. Juga menambahkan API baru yang menungguLoadStateFlowhingga pemuatan diselesaikan ke dalam statusNotLoadingatau Error. (Id6c67)
Perubahan perilaku
PagingData.empty()kini mengirimkan statusNotLoadingsecara default, kecuali jikaLoadStateskustom diteruskan ke konstruktornya. Hal ini berbeda dari perilaku yang ada yang tidak mengirimkanLoadStatessaat dikirimkan kePagingDataAdapteratau mengirimkan status Pemuatan saat dikumpulkan sebagaiLazyPagingItems. Saat dikumpulkan sebagaiLazyPagingItems, daftar kosong juga akan ditampilkan segera setelah komposisi awal. (I4d11d, b/301833847)
Versi 3.3.0-alpha02
20 September 2023
androidx.paging:paging-*:3.3.0-alpha02 dirilis. Versi 3.3.0-alpha02 berisi commit ini.
Kompatibilitas Multiplatform Kotlin
Paging kini mengirimkan artefak yang kompatibel dengan Multiplatform Kotlin, sebagian besar berkat pekerjaan yang di-upstream dari project multiplatform-paging CashApp. Dengan begitu, kita dapat menghindari perbedaan antara dua repositori dan menjaganya agar tetap kompatibel.
paging-commontelah memindahkan semua Paging 3 API kecommondan kini kompatibel dengan jvm dan iOS selain Android.paging-testingtelah memindahkan kodenya kecommondan kini kompatibel dengan jvm dan iOS selain Android.paging-composetelah memindahkan kodenya kecommondan mengirimkan artefak Android, yang cocok dengan dukungan multiplatformandroidx.compose.paging-runtime,paging-guava,paging-rxjava2, danpaging-rxjava3akan tetap khusus Android.
Perubahan API
- Antarmuka Logger publik yang hanya ditujukan untuk penggunaan internal telah dihentikan (I16e95, b/288623117)
Kontribusi Eksternal
- Terima kasih veyndan dari Cash App yang telah membantu memindahkan Paging ke Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609)
Versi 3.3.0-alpha01
20 September 2023
- Ini adalah rilis multiplatform pertama library androidx.paging. Versi ini hanya memiliki artefak
*-jvmdan*-android. Untuk varian macOS, iOS, dan Linux, gunakan3.3.0-alpha02.
Versi 3.2
Versi 3.2.1
6 September 2023
androidx.paging:paging-*:3.2.1 dirilis. Versi 3.2.1 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah saat API
asSnapshot()artefak Paging Testing akan mengalami error saat meneruskan Flow yang dibuat menggunakanPagingData.from(List)karenaasSnapshot()tidak akan memiliki informasi apa pun tentang kapan pemuatan selesai (tidak seperti kelebihan bebanPagingData.from(List, LoadStates)). Solusi ini hanya berfungsi untuk Flow yang dapat diselesaikan (misalnya,flowOf(PagingData.from(...))). Untuk Flow yang tidak dapat diselesaikan (misalnya,MutableStateFlow, gunakan penggantianPagingData.fromyang menyediakanLoadStates). (I502c3) - Paging Compose kini menggunakan
AndroidUiDispatcher.Mainsecara internal untuk memastikan data baru tersedia dalam frame yang sama saat pemuatan selesai. (Ia55af)
Versi 3.2.0
26 Juli 2023
androidx.paging:paging-*:3.2.0 dirilis. Versi 3.2.0 berisi commit ini.
Perubahan penting sejak versi 3.1.0
- Paging Compose telah mencapai stabilitas API dan telah digabungkan kembali ke Paging lainnya yang versinya kini cocok dengan semua artefak Paging lainnya. Perubahan sejak versi 3.1.0 meliputi:
- Dukungan untuk melihat pratinjau daftar data palsu dengan membuat
PagingData.from(fakeData)dan membungkusPagingDatatersebut dalamMutableStateFlow(misalnya,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Teruskan alur ini ke composable@Previewsebagai penerima untukcollectAsLazyPagingItems()guna melihat pratinjau. - Dukungan untuk semua tata letak lambat seperti
LazyVerticalGriddanHorizontalPagerserta komponen lambat kustom dari library Wear dan TV. Hal ini dicapai melalui metode ekstensiLazyPagingItemstingkat bawah baruitemKeydanitemContentType, yang membantu Anda menerapkan parameterkeydancontentTypeke APIitemsstandar yang sudah ada untukLazyColumn,LazyVerticalGrid, serta padanannya di API sepertiHorizontalPager. items(lazyPagingItems)danitemsIndexed(lazyPagingItems)yang hanya mendukungLazyListScopetidak digunakan lagi.
- Dukungan untuk melihat pratinjau daftar data palsu dengan membuat
- Artefak
paging-testingbaru yang menyediakan API yang didesain untuk menguji unit setiap lapisan aplikasi Anda dan integrasinya dengan Paging secara terpisah. Misalnya, ini mencakup- Class
TestPageryang memungkinkan Anda memvalidasi perilaku implementasiPagingSourcekustom Anda sendiri secara independen dari Pager dan UI sebenarnya. - API
asPagingSourceFactoryuntuk mengubahFlow<List<Value>>atauList<Value>statis menjadiPagingSourceFactoryyang dapat diteruskan ke Pager dalam pengujian - Ekstensi Kotlin
asSnapshotdiFlow<PagingData<Value>>, yang menerjemahkanFlow<PagingData<Value>>keList<Value>langsung.asSnapshot lambdamemungkinkan Anda meniru UI aplikasi melalui API sepertiscrollToatauappendScrollWhile, sehingga Anda dapat memverifikasi bahwa snapshot data sudah benar kapan saja di kumpulan data yang di-page.
- Class
- Menambahkan log default untuk menampilkan informasi proses debug Paging dalam dua tingkat:
VERBOSEdanDEBUG. Log dapat diaktifkan melalui perintahadb shell setprop log.tag.Paging [DEBUG|VERBOSE]. Hal ini berlaku untuk Penomoran halaman dengan tampilan atau Penomoran halaman dengan Compose. - Menambahkan konstruktor untuk
PagingDataAdapterdanAsyncPagingDataDifferyang menerimaCoroutineContext, bukanCoroutineDispatcher. - Menambahkan antarmuka fungsional
PagingSourceFactorybaru yang menyediakan tampilan API yang lebih eksplisit daripada lambda () ->PagingSourcesebelumnya. Factory ini dapat digunakan untuk membuat instance Pager.
Versi 3.2.0-rc01
21 Juni 2023
androidx.paging:paging-*:3.2.0-rc01 dirilis. Versi 3.2.0-rc01 berisi commit ini.
Kontribusi Eksternal
- Terima kasih Veyndan atas kontribusinya dalam memindahkan Paging dari spesifikasi Android/JVM. (#553, #554, #555, #559)
Versi 3.2.0-beta01
7 Juni 2023
androidx.paging:paging-*:3.2.0-beta01 dirilis. Versi 3.2.0-beta01 berisi commit ini.
Paging Compose
- Paging Compose telah resmi mencapai stabilitas API. Oleh karena itu, versi telah diupdate dari
1.0.0-alpha20agar kini cocok dengan versi semua artefak Paging lainnya.
Perubahan API
- Menghapus API
items(LazyPagingItems)danitemsIndexed(LazyPagingItems)yang tidak digunakan lagi dari Paging Compose. Lihat catatan rilis Paging Compose1.0.0-alpha20untuk mengetahui contoh API penggantinya. (I9626e)
Versi 3.2.0-alpha06
24 Mei 2023
androidx.paging:paging-*:3.2.0-alpha06 dirilis. Versi 3.2.0-alpha06 berisi commit ini.
Fitur Baru
- Menambahkan antarmuka fungsional
PagingSourceFactorybaru yang menyediakan platform API yang lebih eksplisit daripada lambda() -> PagingSourceyang ada. Factory ini dapat digunakan untuk membuat instancePager. (I33165, b/280655188) - Menambahkan
paging-testingAPI baru dariList<Value>.asPagingSourceFactory()untuk mendapatkanPagingSourceFactoryyang hanya dimuat dari daftar data yang tidak dapat diubah. Ekstensi yang ada diFlow<List<Value>>harus tetap digunakan untuk pengujian dengan beberapa generasi data statis. (Id34d1, b/280655188)
Perubahan API
- Semua API publik di paging-testing kini dianotasi dengan
@VisibleForTestinguntuk memastikan API ini hanya digunakan dalam pengujian. (I7db6e) - API
asSnapshottidak lagi memerlukan penerusanCoroutineScope. Sekarang secara default menggunakan konteks yang diwarisi dari cakupan induknya. (Id0a78, b/282240990) - Mengurutkan ulang parameter konstruktor
TestPageragar cocok secara intuitif dengan urutan parameter konstruktorPageryang sebenarnya (I6185a) - Memigrasikan penggunaan jenis lambda
() -> PagingSource<Key, Value>oleh pengujian penomoran halaman ke jenisPagingSourceFactory<Key, Value>. (I4a950, b/280655188)
Perubahan Perilaku
- Dispatcher utama tidak lagi diperlukan untuk menjalankan pengujian Penomoran
asSnapshot. Menyetelnya tidak lagi membuat perubahan apa pun pada perilaku pengujian. (Ie56ea)
Versi 3.2.0-alpha05
3 Mei 2023
androidx.paging:paging-*:3.2.0-alpha05 dirilis. Versi 3.2.0-alpha05 berisi commit ini.
Perubahan API
- Paging Testing API dari
asSnapshotkini menetapkan parameterloadOperationssecara default ke lambda kosong. Hal ini memungkinkan pemanggilanasSnapshottanpa meneruskan operasi pemuatan apa pun untuk mengambil data dari pemuatan ulang awal. (Ied354, b/277233770)
Peningkatan Dokumentasi
- Memperbarui dokumentasi tentang
asPagingSourceFactory()untuk memperjelas bahwa ini adalah metode ekstensi padaFlowyang menampilkan factory yang dapat digunakan kembali untuk membuat instancePagingSource. (I5ff4f, I705b5) - Memperbarui dokumentasi tentang konstruktor
LoadResult.Pageuntuk menjelaskan kebutuhan menggantiitemsBeforedanitemsAfteruntuk mendukung lompatan. (Ied354)
Kontribusi Eksternal
- Terima kasih Veyndan atas kontribusinya dalam memindahkan Paging dari spesifikasi Android/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
Versi 3.2.0-alpha04
8 Februari 2023
androidx.paging:paging-*:3.2.0-alpha04 dirilis. Versi 3.2.0-alpha04 berisi commit ini.
Pengujian Paging
- Artefak
paging-testingsekarang berisi metodeasPagingSourceFactoryuntuk membuatpagingSourceFactorydariFlow<List<Value>>yang akan diberikan ke Pager. SetiapList<Value>>yang dimunculkan dari Flow mewakili pembuatan data yang di-Page. Tindakan ini memfasilitasi pengujian paging, misalnya, transformasiPagingDatadengan memalsukan sumber data untuk dikumpulkan Pager. (I6f230, b/235528239) Artefak
paging-testingtelah diperluas dengan API baru yang cocok untuk memverifikasi data yang terdapat dalamFlow<PagingData<T>>sudah benar. Ini dapat digunakan, misalnya, untuk menyatakan outputFlow<PagingData<T>>dari lapisan ViewModel Anda.Hal ini dilakukan melalui ekstensi Kotlin
asSnapshotdiFlow<PagingData<Value>>, yang menerjemahkanFlow<PagingData<Value>>keList<Value>langsung. LambdaasSnapshotmemungkinkan Anda meniru UI aplikasi melalui API sepertiscrollToatauappendScrollWhiledengan cara yang dapat diulang dan konsisten, sehingga Anda dapat memverifikasi bahwa snapshot data sudah benar kapan saja di kumpulan data yang di-page.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected valuesasSnapshotadalah metodesuspendyang diharapkan untuk dijalankan dalamrunTest. Lihat Menguji coroutine Kotlin di Android untuk informasi selengkapnya. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
Perubahan API
- Panggilan UI ke
getItemdanpeekdiAsyncPagingDataDifferdanPagingDataAdaptersekarang ditandai dengan benar sebagai hanya dapat dipanggil di Thread utama. (I699b6) - Menghapus karakter pengganti dari jenis generik yang digunakan oleh
TestPager, sehingga mempermudah penggunaan hasil metode tersebut dalam kode yang ditulis dalam bahasa pemrograman Java. (I56c42)
Versi 3.2.0-alpha03
24 Oktober 2022
androidx.paging:paging-*:3.2.0-alpha03 dirilis. Versi 3.2.0-alpha03 berisi commit ini.
Pengujian Paging
Rilis ini berisi artefak baru: paging-testing. Artefak ini menyediakan API yang didesain untuk menguji unit setiap lapisan aplikasi Anda dan integrasinya dengan Paging secara terpisah.
Misalnya, rilis pertama ini menyertakan class TestPager yang memungkinkan Anda memvalidasi perilaku implementasi PagingSource kustom Anda sendiri secara independen dari Pager dan UI sebenarnya yang biasanya perlu simulasi integrasi Paging menyeluruh.
TestPager harus dianggap sebagai palsu - pengujian ganda yang mencerminkan implementasi sebenarnya dari Pager, sekaligus menyediakan platform API yang disederhanakan untuk menguji PagingSource. API ini adalah suspend API dan harus dijalankan dalam runTest seperti yang dijelaskan dalam panduan untuk Menguji coroutine Kotlin di Android.
Contoh penggunaan API ini dapat ditemukan di pengujian room-paging, yang difaktorkan ulang untuk menggunakan TestPager.
Perubahan API
- Memungkinkan iterasi yang nyaman melalui
LoadResult.Page.datahinggaLoadResult.Page.iterator(). Tindakan ini secara tidak langsung memungkinkan penggunaan metodeflattenlibrary standar Kotlin saat diberiList<LoadResult.Page>, seperti dengan propertipagesdariPagingStateyang diteruskan ke metodePagingSource.getRefreshKey. (Ie0718)
Versi 3.2.0-alpha02
10 Agustus 2022
androidx.paging:paging-*:3.2.0-alpha02 dirilis. Versi 3.2.0-alpha02 berisi commit ini.
Fitur Baru
- Paging sekarang menyediakan log melalui class
AsyncPagingDataDifferatauPagingDataAdapteruntuk menampilkan informasi proses debug yang dikumpulkan dariPagingData. - Log dapat diaktifkan melalui perintah
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159)
Perbaikan Bug
- Memperbaiki error konstruktor
PagingDataDifferyang hilang saat menggunakanpaging-common:3.2.0-alpha01dengan runtimepaging-runtime:3.1.1atau yang lebih lama.(b/235256201)
Versi 3.2.0-alpha01
1 Juni 2022
androidx.paging:paging-*:3.2.0-alpha01 dirilis. Versi 3.2.0-alpha01 berisi commit ini.
Perubahan API
- Menambahkan konstruktor untuk
PagingDataAdapterdanAsyncPagingDataDifferyang menerimaCoroutineContext, bukanCoroutineDispatcher. (Idc878) - Secara default,
PagingData.from()danPagingData.empty()tidak akan lagi memengaruhiCombinedLoadStatesdi sisi presenter. Overload baru yang memungkinkan penerusansourceLoadStatesdanremoteLoadStateske konstruktor ini telah ditambahkan untuk mempertahankan perilaku setelanLoadStatesyang ada agar sepenuhnya menjadi terminal (yaitu,NotLoading(endOfPaginationReached = false)), dengan opsi untuk menyertakan juga status jarak jauh jika diperlukan. JikaLoadStatestidak diteruskan,CombinedLoadStatessebelumnya akan dipertahankan di sisi presenter saat menerimaPagingDatastatis. (Ic3ce5, b/205344028)
Perbaikan Bug
- Hasil
PagingSource.getRefreshKey()kini diprioritaskan dengan benar atasinitialKeyjika akan menampilkan null, tetapiinitialKeynon-null ditetapkan. (Ic9542, b/230391606)
Kontribusi Eksternal
- Diupdate: compose:ui:ui-test api (updateApi) karena migrasi test-coroutines-lib (I3366d)
Versi 3.1
Versi 3.1.1
9 Maret 2022
androidx.paging:paging-*:3.1.1 dirilis. Versi 3.1.1 berisi commit ini.
Perbaikan Bug
- Menghapus peristiwa
LoadState.NotLoadingperantara antara beberapa generasi yang salah disisipkan oleh.cachedIn(). Perubahan ini sangat mempermudah reaksi terhadap perubahanLoadStatedengan menghapus peristiwaLoadState.NotLoadingredundan yang dihasilkan antara mencoba ulang pemuatan yang gagal, saat memuat ulang atau selama pembatalan validasi.
Versi 3.1.0
17 November 2021
androidx.paging:paging-*:3.1.0 dirilis. Versi 3.1.0 berisi commit berikut ini.
Perubahan penting sejak versi 3.0.0
Flow<PagingData>.observableAPI danFlow<PagingData>.flowableAPI tidak lagi bersifat eksperimental- Perubahan perilaku pada
LoadState:endOfPaginationReachedsekarang selalufalseuntukLoadType.REFRESHuntukPagingSourcedanRemoteMediatorLoadStatesdari Paging sekarang menunggu nilai yang valid dariPagingSourcedanRemoteMediatorsebelum memunculkan downstream. Sekarang, generasi baruPagingDataakan selalu dimulai dengan benar menggunakanLoadinguntuk status refresh, bukan salah direset keNotLoadingdalam beberapa kasus..loadStateFlowdan.addLoadStateListenerpada API presenter tidak lagi secara berlebihan mengirimCombinedLoadStatesawal yang selalu memiliki status mediator yang ditetapkan kenull
- Pembatalan generasi sebelumnya kini segera terjadi pada saat invalidasi/generasi baru. Seharusnya tidak lagi harus menggunakan
.collectLatestdiFlow<PagingData>, walaupun masih direkomendasikan untuk melakukannya. PagingSource.LoadResult.Invalidtelah ditambahkan sebagai jenis nilai baru yang ditampilkan dariPagingSource.load, sehingga menyebabkan Paging menghapus permintaan pemuatan yang tertunda atau yang akan datang kePagingSourceini dan membatalkan validasinya. Jenis nilai yang ditampilkan ini dirancang untuk menangani data yang berpotensi tidak valid atau tidak berlaku yang dapat ditampilkan dari database atau jaringan.- Menambahkan API presenter
.onPagesPresenteddan.addOnPagesUpdatedListeneryang terpicu secara sinkron saat halaman ditampilkan di UI. Pembaruan halaman dapat terjadi dalam skenario berikut:- Pemuatan awal pembuatan PagingData baru selesai, terlepas dari apakah pembuatan baru tersebut berisi perubahan pada item yang ditampilkan. Dengan kata lain, pembuatan baru menyelesaikan pemuatan awal tanpa pembaruan karena daftar yang sama persis akan tetap memicu callback ini.
- Halaman disisipkan, meskipun halaman yang disisipkan tidak berisi item baru.
- Halaman akan dihapus, meskipun halaman yang dilepas kosong.
Versi 3.1.0-rc01
3 November 2021
androidx.paging:paging-*:3.1.0-rc01 dirilis. Versi 3.1.0-rc01 berisi commit ini.
Perbaikan Bug
- Memperbaiki kondisi race + kebocoran memori dalam .cachedIn() jika beberapa peristiwa pemuatan dikirim oleh downstream Paging saat tidak ada pengamat atau antara waktu saat observer beralih ke PagingData baru. (Ib682e)
Versi 3.1.0-beta01
13 Oktober 2021
androidx.paging:paging-*:3.1.0-beta01 dirilis. Versi 3.1.0-beta01 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah saat banyak akses item cepat dapat menyebabkan item tersebut dihapus untuk pertimbangan dalam prefetchDistance, sehingga pemuatan halaman terhenti. Hal ini terutama menjadi masalah saat banyak letak item ditata sekaligus dalam urutan yang akan memprioritaskan pemuatan terhadap arah scroll pengguna. Akses item ini sekarang di-buffer dan diprioritaskan secara sinkron agar tidak dihapus. (aosp/1833273)
Versi 3.1.0-alpha04
29 September 2021
androidx.paging:paging-*:3.1.0-alpha04 dirilis. Versi 3.1.0-alpha04 berisi commit berikut ini.
Perubahan API
Flow<PagingData>.observableAPI danFlow<PagingData>.flowableAPI tidak lagi bersifat eksperimental. (Ie0bdd)
Perbaikan Bug
- Untuk LoadStates,
endOfPaginationReachedsekarang selalufalseuntukLoadType.REFRESH. Sebelumnya, endOfPaginationReached dapat menjaditrueuntuk RemoteMediatorREFRESH, tetapi tidak untuk PagingSource. Perilaku ini sekarang digabungkan untuk selalu menampilkanfalsekarena tidak masuk akal untuk REFRESH menjadi terminal, dan kini didokumentasikan sebagai bagian dari kontrak API di LoadStates. Saat menentukan apakah penomoran halaman dihentikan, Anda harus selalu melakukannya sesuai dengan arahan APPEND atau PREPEND. (I047b6) LoadStates dari Paging sekarang menunggu nilai yang valid dari PagingSource dan RemoteMediator sebelum menghasilkan downstream antar-generasi. Hal ini mencegah generasi baru PagingData mengirim NotLoading di CombinedLoadStates.source.refresh jika sudah Memuat; generasi baru PagingData sekarang akan selalu dimulai dengan benar karena Memuat untuk status refresh, bukan terlebih dulu mereset ke NotLoading dengan tidak benar di beberapa kasus.
Pembatalan generasi sebelumnya kini segera terjadi pada saat invalidasi/ generasi baru. Sekarang tidak perlu lagi menggunakan .collectLatest di
Flow<PagingData>, meskipun sangat direkomendasikan untuk melakukannya. (I0b2b5, b/177351336, b/195028524).loadStateFlowdan.addLoadStateListenerpada API presenter tidak lagi mengirimkan inisialCombinedLoadStatesberlebihan yang selalu memiliki status mediator yang disetel kenulldan status sumber yang disetel keNotLoading(endOfPaginationReached = false). Ini berarti:- Status mediator akan selalu terisi jika Anda menggunakan RemoteMediator.
- Mendaftarkan pemroses loadState baru atau kolektor baru pada
.loadStateFlowtidak akan lagi memberikan nilai saat ini jika belum menerimaCombinedLoadStatesnyata dariPagingData. Hal ini dapat terjadi jika kolektor atau pemroses dimulai sebelumPagingDatadikirimkan. (I1a748)
Versi 3.1.0-alpha03
21 Juli 2021
androidx.paging:paging-*:3.1.0-alpha03 dirilis. Versi 3.1.0-alpha03 berisi commit ini.
Perubahan API
Jenis nilai yang ditampilkan LoadResult ketiga, LoadResult.Invalid ditambahkan ke PagingSource. Ketika PagingSource.load menampilkan LoadResult.Invalid, paging akan menghapus data yang dimuat dan membatalkan validasi PagingSource. Jenis nilai yang ditampilkan ini dirancang untuk menangani data yang berpotensi tidak valid atau tidak berlaku yang dapat ditampilkan dari database atau jaringan.
Misalnya, jika database dasar mengalami penulisan, tetapi PagingSource tidak membatalkan validasi secara tepat waktu, mungkin akan menampilkan hasil yang tidak konsisten jika implementasinya bergantung pada tingkat ketetapan set data pendukung yang memuatnya (misalnya, penerapan db gaya LIMIT OFFSET). Dalam skenario ini, sebaiknya periksa pembatalan validasi setelah memuat dan menampilkan LoadResult.Invalid, yang menyebabkan Paging menghapus permintaan pemuatan yang tertunda atau mendatang di PagingSource ini dan membatalkan validasinya.
Jenis nilai yang ditampilkan ini juga didukung oleh Paging2 API yang memanfaatkan LivePagedList atau RxPagedList. Saat menggunakan PagingSource dengan PagedList API Paging2, PagedList akan segera dilepaskan, sehingga menghentikan upaya untuk memuat data pada PagedList ini dan memicu pembatalan validasi pada PagingSource.
LoadResult merupakan class tertutup, yang berarti perubahan ini tidak kompatibel dengan sumber sehingga kasus penggunaan langsung menggunakan hasil PagingSource.load harus menangani LoadResult.Invalid pada waktu kompilasi. Misalnya, pengguna Kotlin yang memanfaatkan when menyeluruh untuk memeriksa jenis nilai yang ditampilkan harus menambahkan pemeriksaan untuk Jenis tidak valid. (Id6bd3, b/191806126, b/192013267)
Perbaikan Bug
- Callback pembatalan validasi yang ditambahkan melalui PagingSource.registerInvalidatedCallback atau DataSource.addInvalidatedCallback kini terpicu secara otomatis jika terdaftar pada PagingSource / DataSource yang sudah tidak valid. Tindakan ini mengatasi kondisi race yang menyebabkan Paging menghilangkan sinyal pembatalan validasi dan macet saat diberikan Sumber yang tidak valid selama pemuatan awal. Selain itu, callback pembatalan validasi sekarang dihapus dengan benar setelah dipicu karena callback dijamin akan dipanggil paling banyak satu kali. (I27e69)
- Mengirimkan nilai awal placeholder (InitialPagedList) dari stream PagedList yang baru dibuat instance, misalnya, LivePagedListBuilder atau RxPagedListBuilder tidak akan lagi menghapus data yang dimuat sebelumnya.
Versi 3.1.0-alpha02
1 Juli 2021
androidx.paging:paging-*:3.1.0-alpha02 dirilis. Versi 3.1.0-alpha02 berisi commit ini.
Fitur Baru
Menambahkan pemroses onPagesPresented dan API presenter alur yang segera terpicu setelah halaman yang ditampilkan diperbarui di UI.
Karena pembaruan ini sinkron dengan UI, Anda dapat memanggil metode adaptor seperti .snapshot, .getItemCount, untuk memeriksa status setelah pembaruan diterapkan. Perhatikan bahwa .snapshot() dibiarkan dipanggil secara eksplisit karena dapat menjadi mahal jika dilakukan pada setiap pembaruan.
Pembaruan halaman dapat terjadi dalam skenario berikut:
- Pemuatan awal pembuatan PagingData baru selesai, terlepas dari apakah pembuatan baru tersebut berisi perubahan pada item yang ditampilkan. Dengan kata lain, pembuatan baru menyelesaikan pemuatan awal tanpa pembaruan karena daftar yang sama persis akan tetap memicu callback ini.
- Halaman disisipkan, meskipun halaman yang disisipkan tidak berisi item baru
- Halaman dihapus, meskipun halaman yang dihapus kosong (I272c9, b/189999634)
Perbaikan Bug
- Mengakses PagedList.dataSource dari nilai awal yang dihasilkan oleh LivePagedList atau RxPagedList tidak akan salah lagi melempar IllegalStateException (I96707)
Versi 3.1.0-alpha01
2 Juni 2021
androidx.paging:paging-*:3.1.0-alpha01 dirilis. Versi 3.1.0-alpha01 berisi commit ini.
Perubahan API
- Class yang disediakan oleh
paging-rxjava3kini ada dalam paketandroidx.paging.rxjava3sehingga tidak berkonflik denganpaging-rxjava2(Ifa7f6)
Perbaikan Bug
- Memperbaiki masalah saat Paging terkadang mengirimkan peristiwa lain tanpa pengoperasian ke RecyclerView, yang dapat menyebabkan pemroses tertentu dipicu lebih awal. (Ic507f, b/182510751)
Kontribusi Eksternal
- Menambahkan API compat PagedList yang tidak digunakan lagi ke artefak rxjava3 (Id1ce2, b/182497591)
Paging Compose Versi 1.0.0
Versi 1.0.0-alpha20
24 Mei 2023
androidx.paging:paging-compose:1.0.0-alpha20 dirilis. Versi 1.0.0-alpha20 berisi commit berikut ini.
Fitur Baru
- Paging Compose kini mendukung pratinjau daftar data palsu dengan membuat
PagingData.from(fakeData)dan membungkusPagingDatatersebut dalamMutableStateFlow(misalnya,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Dengan menggunakan data tersebut sebagai input ke@Preview, panggilan kecollectAsLazyPagingItems()akan memberikanLazyPagingItemsyang dapat dilihat pratinjaunya. (I8a78d, b/194544557)
Perbaikan Bug
- Data yang di-cache dari
pager.flow.cachedInyang telah dikumpulkan diLazyPagingItemskini akan segera tersedia setelah pemulihan status tanpa memerlukan pengumpulan asinkron. Artinya, data dalam cache akan siap untuk presentasi segera setelah komposisi awal setelah status dipulihkan. (I97a60, b/177245496)
Versi 1.0.0-alpha19
3 Mei 2023
androidx.paging:paging-compose:1.0.0-alpha19 dirilis. Versi 1.0.0-alpha19 berisi commit berikut ini.
Mendukung semua tata letak lambat
Sebelumnya, Paging Compose menyediakan ekstensi items dan itemsIndexed kustom di LazyListScope, yang berarti Anda tidak dapat menggunakan Paging Compose dengan tata letak lambat lainnya seperti LazyVerticalGrid, HorizontalPager, atau komponen lambat kustom lainnya yang disediakan oleh library Wear dan TV. Memperbaiki ketidakfleksibelan ini adalah update utama untuk rilis ini.
Untuk mendukung tata letak yang lebih lambat, kita perlu membuat API di lapisan yang berbeda - daripada menyediakan API items kustom untuk setiap tata letak lambat, Paging Compose kini menyediakan metode ekstensi tingkat yang sedikit lebih rendah pada LazyPagingItems di itemKey dan itemContentType. API ini berfokus untuk membantu Anda menerapkan parameter key dan contentType ke API items standar yang sudah ada untuk LazyColumn, LazyVerticalGrid, serta padanannya di API seperti HorizontalPager. (Ifa13b, Ib04f0, b/259385813)
Artinya, dukungan untuk LazyVerticalGrid akan terlihat seperti:
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
Untuk contoh penggunaan API baru ini lainnya, lihat contoh kami.
Meskipun perubahan ini membuat contoh LazyColumn dan LazyRow menjadi beberapa baris lebih panjang, kami merasa bahwa konsistensi di semua tata letak lambat adalah faktor penting bagi mereka yang menggunakan Paging Compose ke depannya. Oleh karena itu, ekstensi yang ada untuk LazyListScope kini tidak digunakan lagi. (I0c459, I92c8f, b/276989796)
Perubahan API
- Untuk mempermudah migrasi ke API baru, fungsi ekstensi
itemsdanitemsIndexeddiLazyListScopekini mendukung parametercontentType, yang mencerminkan dukungan di API baru. (Ib1918, b/255283378)
Update Dependensi
- Paging Compose telah mengupdate dependensinya dari Compose 1.0.5 menjadi Compose 1.2.1. (Ib1918, b/255283378)
Versi 1.0.0-alpha18
8 Februari 2023
androidx.paging:paging-compose:1.0.0-alpha18 dirilis tanpa perubahan. Versi 1.0.0-alpha18 berisi commit ini.
Versi 1.0.0-alpha17
24 Oktober 2022
androidx.paging:paging-compose:1.0.0-alpha17 dirilis. Versi 1.0.0-alpha17 berisi commit berikut ini.
Fitur Baru
- Tambahkan dukungan untuk
CoroutineContextkustom saat memanggilcollectLazyPagingItems. (I7a574, b/243182795, b/233783862)
Versi 1.0.0-alpha16
10 Agustus 2022
androidx.paging:paging-compose:1.0.0-alpha16 dirilis. Versi 1.0.0-alpha16 berisi commit berikut ini.
Fitur Baru
- Paging sekarang menyediakan log melalui class
LazyPagingItemsuntuk menampilkan informasi proses debug yang dikumpulkan dari PagingData. - Log dapat diaktifkan melalui perintah
adb shell, yakniadb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Perbaikan Bug
- Memperbaiki error konstruktor
PagingDataDifferyang hilang saat menggunakanpaging-compose:1.0.0-alpha15denganpaging-common:3.1.1atau yang lebih lama.(b/235256201,b/239868768)
Versi 1.0.0-alpha15
1 Juni 2022
androidx.paging:paging-compose:1.0.0-alpha15 dirilis. Versi 1.0.0-alpha15 berisi commit ini.
Perubahan API
- Menambahkan konstruktor untuk
PagingDataAdapterdanAsyncPagingDataDifferyang menerimaCoroutineContext, bukanCoroutineDispatcher. (Idc878)
Perbaikan Bug
LazyPagingItemskini menetapkanloadStateawal untuk memuat ulangLoadState.Loading. (I55043, b/224855902)
Versi 1.0.0-alpha14
13 Oktober 2021
androidx.paging:paging-compose:1.0.0-alpha14 dirilis. Versi 1.0.0-alpha14 berisi commit berikut ini.
Versi 1.0.0-alpha13
29 September 2021
androidx.paging:paging-compose:1.0.0-alpha13 dirilis. Versi 1.0.0-alpha013 berisi commit berikut ini.
Perubahan API
- Fungsi
LazyPagingItems.snapshot()diganti dengan propertiLazyPagingItems.itemSnapshotList(Ie2da8) LazyPagingItems.getAsState()yang tidak digunakan lagi telah dihapus (Ie65e4)
Versi 1.0.0-alpha12
21 Juli 2021
androidx.paging:paging-compose:1.0.0-alpha12 dirilis. Versi 1.0.0-alpha12 berisi commit ini.
Perubahan API
items(lazyPagingItems)danitemsIndexed(lazyPagingItems)yang digunakan untuk menghubungkan Paging denganLazyColumn/Rowsekarang menerima parameter kunci opsi yang memungkinkan Anda menentukan kunci stabil yang menampilkan item. Anda dapat membaca selengkapnya tentang kunci di sini. (I7986d)- Fungsi
lazyPagingItems.getAsState(index)kini tidak digunakan lagi. GunakanlazyPagingItems[index]saja. (I086cb, b/187339372)
Versi 1.0.0-alpha11
30 Juni 2021
androidx.paging:paging-compose:1.0.0-alpha11 dirilis. Versi 1.0.0-alpha11 berisi commit ini.
Versi 1.0.0-alpha10
2 Juni 2021
androidx.paging:paging-compose:1.0.0-alpha10 dirilis. Versi 1.0.0-alpha10 berisi commit ini.
Versi 1.0.0-alpha09
18 Mei 2021
androidx.paging:paging-compose:1.0.0-alpha09 dirilis. Versi 1.0.0-alpha09 berisi commit berikut ini.
Perbaikan Bug
- itemCount dan pengambil item LazyPagingItems kini dapat diobservasi sehingga juga dapat digunakan dengan LazyVerticalGrid (Ie2446, b/171872064, b/168285687)
Kompatibilitas Compose
androidx.paging:paging-compose:1.0.0-alpha09hanya kompatibel dengan Compose versi1.0.0-beta07dan yang lebih baru.
Versi 1.0.0-alpha08
24 Februari 2021
androidx.paging:paging-compose:1.0.0-alpha08 dirilis. Versi 1.0.0-alpha08 berisi commit berikut.
Diupdate untuk diintegrasikan dengan Compose 1.0.0-beta01.
Versi 1.0.0-alpha07
10 Februari 2021
androidx.paging:paging-compose:1.0.0-alpha07 dirilis. Versi 1.0.0-alpha07 berisi commit berikut ini.
Diperbarui agar dapat berintegrasi dengan Compose alpha12.
Versi 1.0.0-alpha06
28 Januari 2021
androidx.paging:paging-compose:1.0.0-alpha06 dirilis. Versi 1.0.0-alpha06 berisi commit ini.
Perbaikan Bug
Diperbarui agar bergantung pada Compose 1.0.0-alpha11.
Versi 1.0.0-alpha05
13 Januari 2021
androidx.paging:paging-compose:1.0.0-alpha05 dirilis. Versi 1.0.0-alpha05 berisi commit ini.
Diperbarui agar bergantung pada Compose 1.0.0-alpha10.
Versi 1.0.0-alpha04
16 Desember 2020
androidx.paging:paging-compose:1.0.0-alpha04 dirilis. Versi 1.0.0-alpha04 berisi commit ini.
Perbaikan Bug
- Memperbarui properti kemudahan,
CombinedLoadStates.refresh,CombinedLoadStates.prepend, danCombinedLoadStates.appendagar hanya bertransisi dariLoadingkeNotLoadingsetelah pemuatan sumber dan mediator dalam statusNotLoadinguntuk memastikan pembaruan jarak jauh telah diterapkan. (I65619)
Versi 1.0.0-alpha03
2 Desember 2020
androidx.paging:paging-compose:1.0.0-alpha03 dirilis. Versi 1.0.0-alpha03 berisi commit berikut ini.
- Diperbarui agar cocok dengan Compose 1.0.0-alpha08.
Versi 1.0.0-alpha02
11 November 2020
androidx.paging:paging-compose:1.0.0-alpha02 dirilis. Versi 1.0.0-alpha02 berisi commit ini.
Perubahan API
- Menambahkan metode
.peek(),.snapshot(),.retry(), dan.refresh()keLazyPagingItemyang menunjukkan fungsi sama dengan yang tersedia diAsyncPagingDataDiffer/PagingDataAdapter(Iddfe8, b/172041660)
Versi 1.0.0-alpha01
28 Oktober 2020
androidx.paging:paging-compose:1.0.0-alpha01 dirilis. Versi 1.0.0-alpha01 berisi commit ini.
Fitur Baru
Artefak paging-compose menyediakan integrasi antara Library Paging dan Jetpack Compose. Contoh penggunaan sederhana:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Versi 3.0.1
Versi 3.0.1
21 Juli 2021
androidx.paging:paging-*:3.0.1 dirilis. Versi 3.0.1 berisi commit berikut ini.
Perbaikan Bug
- Mengakses
PagedList.dataSourcedari nilai awal yang dihasilkan olehLivePagedListatauRxPagedListtidak akan lagi salah menampilkan IllegalStateException (I96707)
Versi 3.0.0
Versi 3.0.0
5 Mei 2021
androidx.paging:paging-*:3.0.0 dirilis. Versi 3.0.0 berisi commit berikut ini.
Fitur utama 3.0.0
Sebagian besar API yang ada dari Paging 2.x.x tidak digunakan lagi dan digantikan dengan API Paging 3 baru untuk menghadirkan peningkatan berikut:
- Dukungan kelas satu untuk coroutine Kotlin dan Flow
- Dukungan untuk pembatalan
- Status pemuatan bawaan dan sinyal error
- Fungsionalitas coba lagi + refresh
- Ketiga subclass DataSource telah digabungkan ke dalam class PagingSource terpadu
- Transformasi halaman kustom termasuk transformasi bawaan untuk menambahkan pemisah
- Header dan footer status pemuatan
Versi 3.0.0-rc01
21 April 2021
androidx.paging:paging-*:3.0.0-rc01 dirilis. Versi 3.0.0-rc01 berisi commit berikut ini.
Perbaikan Bug
- Memperbaiki masalah saat Paging terkadang mengirimkan peristiwa lain tanpa pengoperasian ke RecyclerView, yang dapat menyebabkan pemroses tertentu dipicu lebih awal. (Ic507f, b/182510751)
Versi 3.0.0-beta03
24 Maret 2021
androidx.paging:paging-*:3.0.0-beta03 dirilis. Versi 3.0.0-beta03 berisi commit berikut ini.
Perbaikan Bug
- Kami telah mengubah cara penanganan placeholder saat daftar dimuat ulang untuk mencegah lompatan tidak terduga di RecyclerView. Lihat NullPaddedDiffing.md untuk detail selengkapnya. (If1490, b/170027529, b/177338149)
- Berbagai builder PagedList (jalur kompatibilitas lama) tidak lagi salah memanggil
DataSource.Factory.create()secara sinkron di thread Utama saat.build()dipanggil. (b/182798948)
Versi 3.0.0-beta02
10 Maret 2021
androidx.paging:paging-*:3.0.0-beta02 dirilis. Version 3.0.0-beta02 berisi commit berikut ini.
Perubahan API
- Ekstensi Rx3 kini memperluas persyaratan Opt-In
@ExperimentalCoroutinesApidengan benar. Sebelumnya ekstensi ini ditandai pada metode@get, yang diabaikan oleh Kotlin Compiler karena: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Perbaikan Bug
- Menerapkan batasan di penggunaan publik API eksperimental (I6aa29, b/174531520)
- Memperbaiki bug yang menyebabkan
PagingStateselalunullsaat pemuatan ulang jarak jauh dipanggil. - Memperbaiki bug saat halaman kosong yang ditampilkan oleh PagingSource dapat mencegah Paging agar tidak mengambil data lagi untuk memenuhi
prefetchDistanceyang menyebabkan Paging “terhenti”.
Versi 3.0.0-beta01
10 Februari 2021
androidx.paging:paging-*:3.0.0-beta01 dirilis. Versi 3.0.0-beta01 berisi commit berikut ini.
Perubahan API
- Wrapper Rx2 dan Rx3 sekarang mengekspos anotasi eksperimental
yang menjadi dependensinya. Jika menggunakan wrapper kompatibilitas Rx di paging-rxjava2 atau
paging-rxjava3, Anda sekarang perlu memberi anotasi pada penggunaan dengan
@OptIn(ExperimentalCoroutinesApi::class)(Ib1f9d)
Perbaikan Bug
- Memperbaiki
IndexOutOfBoundsException: Inconsistency detectedyang terkadang dilempar saat menggunakanDataSourceAPI v2 melalui jalur kompatibilitas - Panggilan
isInvalidselama inisialisasiDataSourcesaat digunakan melalui jalur kompatibilitas kini diluncurkan dengan benar di fetchDispatcher, bukan di thread utama. Tindakan ini memperbaikiIllegalStateExceptionkarena akses Db di thread utama saat menggunakan implementasiPagingSourceRoom.
Versi 3.0.0-alpha13
27 Januari 2021
androidx.paging:paging-*:3.0.0-alpha13 dirilis. Versi 3.0.0-alpha13 berisi commit berikut.
Perubahan API
PagingSource.getRefreshKeytidak lagi bersifat opsional untuk diimplementasikan, fungsi tersebut sekarang menjadi fungsi abstrak tanpa implementasi default. Memigrasikan pengguna dapat terus menampilkan implementasi default, yang hanya menampilkannull, tetapigetRefreshKey()harus memiliki implementasi nyata yang menampilkan kunci berdasarkan posisi scroll saat ini dari pengguna yang memungkinkan Paging terus memuat di tengah area pandang melaluiPagingState.anchorPositionjika memungkinkan. (I4339a)InvalidatingPagingSourceFactorysekarang menjadi class final (Ia3b0a)- Mengizinkan konfigurasi perilaku pemisah terminal (header/footer)
dengan parameter SeparatorType opsional tambahan. Kedua
opsi tersebut adalah:
FULLY_COMPLETE- perilaku yang ada; menunggu hingga PagingSource dan RemoteMediator menandai endOfPaginationReached sebelum menambahkan pemisah terminal. Jika RemoteMediator tidak digunakan, loadState jarak jauh akan diabaikan. Hal ini berguna terutama jika Anda hanya ingin menampilkan pemisah bagian ketika bagian tersebut dimuat sepenuhnya, termasuk pengambilan dari sumber jarak jauh, misalnya jaringan.SOURCE_COMPLETE- hanya menunggu PagingSource untuk menandai endOfPaginationReached meskipun RemoteMediator digunakan. Hal ini memungkinkan header dan footer ditampilkan secara sinkron dengan pemuatan awal, sehingga pengguna tidak perlu men-scroll untuk melihat pemisah terminal. (Ibe993, b/174700218)
Perbaikan Bug
- Memperbaiki kebocoran memori yang jarang, yang terjadi ketika PagingSource tidak valid sebelum PageFetcher dapat mulai memuat darinya. (I9606b, b/174625633)
Versi 3.0.0-alpha12
13 Januari 2021
androidx.paging:paging-*:3.0.0-alpha12 dirilis. Versi 3.0.0-alpha12 berisi commit berikut.
Perubahan API
- InvalidatingPagingSourceFactory tidak lagi menjadi class abstrak karena tidak pernah memiliki metode abstrak. (I4a8c4)
- Menambahkan overload .cachedIn() yang menerima ViewModel, bukan Lifecycle atau CoroutineScope untuk pengguna Java. (I97d81, b/175332619)
- Mengizinkan pemanggil Java untuk menggunakan operasi transformasi PagingData
secara asinkron, dengan menerima Executor ke dalam argumen
operator transformasi. Akhiran -Sync pada semua operator transformasi -Sync kini
telah dihapus, dan sebagai gantinya, pengguna Coroutine Kotlin harus membedakan dengan
memanggil fungsi ekstensi yang menerima blok penangguhan.
Semua operator transformasi PagingData telah dipindahkan ke ekstensi
di bawah class PagingDataTransforms statis. Pengguna Java harus
memanggilnya melalui helper statis, misalnya,
PagingDataTransforms.map(pagingData, transform)Untuk pengguna Kotlin, sintaksisnya sama, tetapi Anda harus mengimpor fungsi tersebut. (If6885, b/172895919)
Perbaikan Bug
- Memperbaiki bug saat
RemoteMediator.load()tidak akan dipanggil selamaadapter.refresh()jika akhir paging sudah tercapai.
Versi 3.0.0-alpha11
16 Desember 2020
androidx.paging:paging-*:3.0.0-alpha11 dirilis. Versi 3.0.0-alpha11 berisi commit berikut ini.
Fitur Baru
- Menambahkan dukungan status tersimpan untuk kasus penggunaan dasar berikut (dukungan penuh, terutama untuk sumber berlapis, masih dalam proses):
- alur di-cache dan aplikasi tidak ditutup (misalnya, alur di-cache dalam model tampilan dan aktivitas dibuat ulang dalam proses)
- sumber paging dihitung, placeholder diaktifkan, dan tata letak tidak diatur.
Perubahan API
PagingSource.getRefreshKey()sekarang menjadi API stabil (I22f6f, b/173530980)PagingSource.invalidatetidak lagi menjadi fungsi terbuka. Jika Anda perlu mendapatkan notifikasi saat pembatalan validasi terjadi, sebaiknya panggil metode registerInvalidatedCallback, bukan mengganti pembatalan validasi. (I628d9, b/173029013, b/137971356)- Pager sekarang memiliki satu konstruktor eksperimental bersama dengan konstruktor regulernya, dan bukan membocorkan API eksperimental ke dalam API publik non-eksperimental melalui anotasi keikutsertaan. (I9dc61, b/174531520)
- Memperbarui properti kemudahan,
CombinedLoadStates.refresh,CombinedLoadStates.prepend, danCombinedLoadStates.appendagar hanya bertransisi dariLoadingkeNotLoadingsetelah pemuatan sumber dan mediator dalam statusNotLoadinguntuk memastikan pembaruan jarak jauh telah diterapkan. (I65619) LoadParams.pageSize telah dihapus (sudah tidak digunakan lagi). Sebaiknya gunakan
LoadParams.loadSizedi PagingSource Anda.LoadParams.loadSizeselalu sama denganPagingConfig.pageSizekecuali untuk panggilan pemuatan awal yang sama denganPagingConfig.initialLoadSize.Jika Anda menguji Paging2 DataSource tanpa menggunakan Pager atau PagedList,
pageSizemungkin tidak cocok denganPagingConfig.pageSizejika Anda juga menyetelinitialLoadSize. Jika penting bagi pengujian Anda, coba gunakan Pager/PagedList saja, yang secara internal akan menyetel PageSize yang benar untuk metode pemuatan DataSource Anda. (I98ac7, b/149157296)
Perbaikan Bug
- Memperbaiki error karena IllegalStateException saat menggunakan pemisah dengan kumpulan PagingConfig.maxSize. (I0ed33, b/174787528)
- Memperbaiki bug saat status pemuatan untuk PREPEND/APPEND tidak segera
diperbarui menjadi
NotLoading(endOfPaginationReached = true)setelah pemuatan awal jika RemoteMediator disetel (I8cf5a) - Memperbaiki bug saat API sisi presenter seperti .snapshot(), .peek(), dll., akan menampilkan daftar sebelumnya (yang sudah tidak berlaku) dalam pembaruan ListUpdateCallback.
- Memperbaiki bug saat operator Pemisah tidak akan menambahkan header atau footer ketika digunakan dengan RemoteMediator
- Memperbaiki bug saat pembaruan LoadState ke NotLoading untuk RemoteMediator akan terhenti dalam status Loading
- Memperbaiki bug saat API kompatibilitas Paging2.0,
.asPagingSourceFactory(), dapat menyebabkanDataSourcependukung diinisialisasi pada CoroutineDispatcher yang salah. Tindakan ini akan memperbaiki error dan kemungkinan kasus ANR, terutama ketika menggunakan implementasi PagingSource saat ini dari Room, yang menggunakan jalur kompatibilitas ini.
Versi 3.0.0-alpha10
2 Desember 2020
androidx.paging:paging-*:3.0.0-alpha10 dirilis. Versi 3.0.0-alpha10 berisi commit berikut ini.
Perubahan API
API
dataRefreshFlowdandataRefreshListeneryang sudah tidak digunakan lagi telah dihapus karena redundan dengan pembaruan loadStateFlow/Listener. Bagi yang bermigrasi, nilai loadStateFlow yang setara adalah:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Perbaikan Bug
- endOfPaginationReached untuk RemoteMediator
REFRESHsekarang diperluas dengan benar ke pembaruan LoadState dan mencegahAPPENDdanPREPENDjarak jauh dipicu. (I94a3f, b/155290248) - Menyajikan daftar kosong karena halaman awal yang kosong atau
pemfilteran yang berlebihan tidak lagi mencegah Paging memulai pemuatan
PREPENDatauAPPEND. (I3e702, b/168169730) - Memperbaiki masalah saat
getRefreshKeytidak dipanggil pada pembuatan PagingSource berikutnya saat pembatalan validasi terjadi dengan cepat. (I45460, b/170027530)
Kontribusi Eksternal
- Class abstrak baru InvalidatingPagingSourceFactory telah ditambahkan
dengan
.invalidate()API yang meneruskan pembatalan validasi ke semua PagingSources yang mengeluarkannya. Terima kasih kepada @claraf3. (Ie71fc, b/160716447)
Masalah Umum
- Header dan footer dari transformasi .insertSeparators() mungkin tidak langsung muncul saat menggunakan RemoteMediator b/172254056
- Menggunakan RemoteMediator dapat menyebabkan
LoadStatejarak jauh terhenti jika pembatalan validasi danPagingSource.load(LoadParams.Refresh(...))selesai sebelumRemoteMediator.load()ditampilkan b/173717820
Versi 3.0.0-alpha09
11 November 2020
androidx.paging:paging-*:3.0.0-alpha09 dirilis. Versi 3.0.0-alpha09 berisi commit berikut.
Perubahan API
- Metode dataRefreshFlow/Listener sepenuhnya tidak digunakan lagi dengan klausa replaceWith. (I6e2dd)
Perbaikan Bug
- Perbaikan untuk
IllegalArgumentExceptionditampilkan saat menggunakan pemisah dengan RemoteMediator dan invalidate akan dipicu saat pemuatan jarak jauh yang akan menampilkan endOfPagination masih berjalan (I3a260)
Versi 3.0.0-alpha08
28 Oktober 2020
androidx.paging:paging-*:3.0.0-alpha08 dirilis. Versi 3.0.0-alpha08 berisi commit berikut.
Perubahan API
- Varian Kotlin/Java dari
DataSource.InvalidatedCallbacktelah digabungkan dengan mengaktifkan konversi SAM di Kotlin melalui antarmuka fungsional (tersedia di Kotlin 1.4). Hal ini juga memperbaiki bug yang menyebabkan varian kotlin dari callback yang tidak divalidasi tidak dipanggil setelah ditransformasi oleh.mapatau.mapByPage. (I1f244, b/165313046)
Perbaikan Bug
- Interaksi Paging dengan ViewPager menjadi jauh lebih baik. Terutama, Paging tidak akan lagi membatalkan panggilan
RemoteMediator#loadkarena invalidasi halaman. Tindakan ini juga tidak akan lagi membuat permintaan pemuatan append/prepend, jika perlu REFRESH, hingga permintaan REFRESH berhasil diselesaikan. (I6390b, b/162252536) - Pemeriksaan lint API untuk MissingGetterMatchingBuilder diaktifkan untuk androidx (I4bbea, b/138602561)
- Memperbaiki bug yang membuat helper
.withLoadState*ConcatAdaptererror karena memberi tahu RecyclerView dari thread latar belakang (I18bb5, b/170988309) - Memperbaiki bug saat pemuatan halaman non-kosong yang sangat kecil terkadang mencegah pengambilan data sehingga tidak memicu pemuatan dengan benar.Iffda3 b/169259468
Versi 3.0.0-alpha07
1 Oktober 2020
androidx.paging:paging-*:3.0.0-alpha07 dirilis. Versi 3.0.0-alpha07 berisi commit berikut ini.
Perubahan API
- Operator PagingData asinkron berbasis Guava kini menerima Executor sebagai parameter, untuk mengontrol konteks eksekusi. (Id4372)
Perbaikan Bug
- Memperbaiki pengecualian IndexOutOfBounds yang ditampilkan di RemoteMediator karena kondisi race. (I00b7f, b/165821814)
- Memperbaiki kondisi race dalam konversi DataSource -> PagingSource yang dapat menyebabkan PagingSource yang dihasilkan mengabaikan sinyal invalidasi dari DataSource.
- Memperbaiki masalah dalam logika pengambilan halaman yang terkadang menyebabkan kegagalan pengambilan pembuatan PagingSource baru sampai PagingDataAdapter.refresh() dipanggil
- Memperbaiki masalah yang akan menyebabkan posisi scroll terkadang hilang saat menggunakan DataSource yang dikonversi ke PagingSource (seperti yang dihasilkan oleh Room), bersama RemoteMediator
Kontribusi Eksternal
- Terima kasih kepada @simonschiller yang telah menambahkan operator transformasi asinkron berbasis RxJava2, RxJava3, dan Guava untuk PagingData.
Versi 3.0.0-alpha06
2 September 2020
androidx.paging:paging-*:3.0.0-alpha06 dirilis. Versi 3.0.0-alpha06 berisi commit berikut.
Perubahan API
UnsupportedOperationExceptiondengan pesan yang lebih jelas seputar kurangnya dukungan untuk ID stabil kini ditampilkan setiap kaliPagingDataAdapter.setHasStableIdsdipanggil. (Ib3890, b/158801427)
Perbaikan Bug
- insertSeparator tidak lagi memfilter halaman kosong yang memungkinkan jarak pengambilan data diterima oleh presenter meskipun banyak halaman kosong disisipkan. (I9cff6, b/162538908)
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
- Menampilkan
LoadResult.Errorke 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.0.0-alpha04 berisi commit berikut.
Perubahan API
- Menambahkan
peek()API keAsyncPagingDataDifferdanPagingDataAdapteruntuk memungkinkan akses data yang disajikan tanpa memicu pemuatan halaman. (I38898, b/159104197) - Menambahkan
snapshot()API kePagingDataAdapterdanAsyncPagingDataDifferuntuk 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
PagingSourcedanRemoteMediator(I49ef3, b/161480176)
Perbaikan Bug
PositionalDataSourcedikonversi menjadiPagingSourcemelalui helpertoPagingSourceFactory, termasukPagingSourceyang dihasilkan oleh Room sekarang telah menandai dirinya dengan benar untuk mendukung jumping. (I3e84c, b/162161201)- Memperbaiki 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 ditutup ternyata tidak memuat halaman meskipun pengaksesan item tersebut masih berada dalam prefetchDistance (Ie95ae, b/160038730)
- Setelan PagingConfig.maxSize tidak lagi mengaktifkan placeholder setelah peristiwa penutupan (I2be29, b/159667766)
Versi 3.0.0-alpha02
24 Juni 2020
androidx.paging:paging-*:3.0.0-alpha02 dirilis. Versi 3.0.0-alpha02 berisi commit berikut.
Perubahan API
- Penambahan overload untuk konstruktor
PagingConfigdengan nilai default umum (I39c50, b/158576040) - Menambahkan overload untuk konstruktor
PagingDataAdapterdanAsyncPagingDataDifferdengan nilai default umum (Ie91f5) - API adaptor,
dataRefreshFlow, dandataRefreshListenersekarang meneruskan Boolean untuk memberi sinyal apakahPagingDatakosong (I6e37e, b/159054196) - Menambahkan RxJava dan Guava API untuk RemoteMediator - RxRemoteMediator dan ListenableFutureRemoteMediator
- Menambahkan bantuan ke PagingState untuk akses item umum seperti
isEmpty()danfirstItemOrNull()(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/158486430)
- Kegagalan dari RemoteMediator REFRESH tidak lagi mencegah pemuatan PagingSource (I38b1b, b/158892717)
- Versi non-penangguhan
submitDatatidak lagi menyebabkan error karena pengumpulan serentak pada beberapaPagingDataketika dipanggil setelah versisubmitDatayang ditangguhkan. (I26358, b/158048877) - Memperbaiki pengecualian "tidak dapat dikumpulkan dua kali dari pager" yang dapat terjadi setelah perubahan konfigurasi (I58bcc, b/158784811)
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 penting baru.
Fitur Baru Versi 3.0
- Dukungan kelas satu untuk Flow dan coroutine Kotlin.
- Dukungan untuk pemuatan asinkron dengan fungsi penangguhan coroutine, primitif Guava ListenableFuture atau RxJava Single.
- Status pemuatan bawaan dan sinyal error untuk desain UI yang responsif, termasuk fungsi coba lagi (retry) dan refresh.
- Perbaikan pada lapisan repositori
- Antarmuka sumber data yang disederhanakan
- Penomoran halaman database + jaringan yang disederhanakan
- Dukungan pembatalan
- Perbaikan pada lapisan presentasi
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
IndexOutOfBoundsExceptiondalam kasus yang jarang terjadi saat mengonversi posisi selama invalidasi.
Masalah rilis
Versi Paging
2.1.1dirilis secara tidak benar dari cabang yang salah dikonfigurasi, sehingga mengekspos API dan fungsionalitas yang diimplementasikan sebagian dalam rilis mendatang.Paging
2.1.2berisi 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 memiliki dua tambahan utama - 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 untukPagedList.Config.Builder - Penambahan
androidx.paging.PagedList()sebagai alternatif Kotlin untukPagedList.Builder - Penambahan
DataSourceFactory.toLiveData()sebagai alternatif Kotlin untukLivePagedListBuilder - Penambahan
DataSourceFactory.toObservable()dantoFlowable()sebagai alternatif Kotlin untukRxPagedListBuilder - 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
- Memperbaiki kondisi race saat melakukan diffing jika daftar digunakan kembali b/111591017
PagedList.loadAround()sekarang menampilkanIndexOutOfBoundsExceptionjika indeks tidak valid. Sebelumnya, masalah dapat terjadi dengan pengecualian lain yang tidak jelas.- Memperbaiki 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
- Memperbaiki error yang dapat terjadi pada scroll yang sangat cepat menggunakan
PositionalDataSourcedan placeholder b/114635383.
Versi 2.0.0-beta01
2 Juli 2018
Perbaikan Bug
- Memperbaiki konten yang hilang dalam beberapa kasus prepend (placeholder dinonaktifkan, PositionalDataSource) b/80149146
- (Sudah dirilis dalam
1.0.1) Memperbaiki error ketikaPagedListAdapterdanAsyncPagedListDiffergagal 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
- Memperbaiki error ketika
PagedListAdapterdanAsyncPagedListDiffergagal menandai peristiwa pemindahan. b/110711937
RxJava2 Versi 1.0.0
RxJava2 Versi 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
RxPagedListBuilderditambahkan melalui artefakandroid.arch.paging:rxjava2baru.
Perubahan API
Perubahan API untuk memperjelas peran eksekutor dalam builder:
Mengganti nama
setBackgroundThreadExecutor()menjadisetFetchExecutor()(dalamPagedList.BuilderdanLivePagedListBuilder)Mengganti nama
setMainThreadExecutor()menjadisetNotifyExecutor()(dalamPagedList.Builder).
Memperbaiki anggota
PagedList.mCallbacksmenjadi pribadi.
Perbaikan Bug
LivePagedListBuildermemicu pemuatanPagedListawal pada eksekutor yang ditentukan, bukannya kumpulan thread IO Komponen Arch.Memperbaiki perilaku pembatalan validasi dalam wrapper
DataSourceinternal (yang digunakan untuk mengimplementasikanDataSource.map, serta pemuatanPositionalDataSourceyang 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 memperbarui 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.LoadParamssekarang memiliki konstruktor publik dan objekDataSource.LoadCallbacksekarang abstrak. Perubahan ini memungkinkan penggabunganDataSourceatau pengujianDataSourcesecara langsung dengan callback palsu. b/72600421 - Mapper untuk DataSource dan DataSource.Factory
map(Function<IN,OUT>)memungkinkan Anda mengubah, menggabungkan, atau mendekorasi hasil yang dimuatDataSource.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.extensionsdanLivePagedListProvider. DataSource.Factorydiubah dari antarmuka menjadi class abstrak guna memungkinkan fungsi peta.
Perbaikan Bug
- Mengubah Builder menjadi final. b/70848565
- Perbaikan implementasi
DataSourceRoom untuk menangani kueri multitabel. Perbaikan ini disertakan dalam Room 1.1.0-beta1, lihat di atas. - Memperbaiki bug yang menyebabkan
BoundaryCallback.onItemAtEndLoadedtidak dipanggil untukPositionalDataSourcejika 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