Sayfalama
Bu tabloda, androidx.paging grubundaki tüm yapılar listelenir.
| Yapı | Kararlı sürüm | Sürüm Adayı | Beta Sürümü | Alfa sürümü |
|---|---|---|---|---|
| paging-* | 3.3.6 | - | - | 3.4.0-alpha04 |
| paging-compose | 3.3.6 | - | - | 3.4.0-alpha04 |
Bağımlılıkları bildirme
Paging'e bağımlılık eklemek için Google Maven deposunu projenize eklemeniz gerekir. Daha fazla bilgi için Google'ın Maven deposunu okuyun.
Uygulamanız veya modülünüz için build.gradle dosyasına ihtiyacınız olan yapılarla ilgili bağımlılıkları ekleyin:
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") }
Kotlin uzantılarını kullanma hakkında bilgi edinmek için ktx dokümanlarını inceleyin.
Bağımlılıklar hakkında daha fazla bilgi için Derleme Bağımlılıkları Ekleme başlıklı makaleyi inceleyin.
Geri bildirim
Geri bildiriminiz Jetpack'in iyileştirilmesine yardımcı olur. Yeni sorunlar keşfederseniz veya bu kitaplığı iyileştirmeye yönelik fikirleriniz varsa lütfen bize bildirin. Yeni bir sorun oluşturmadan önce lütfen bu kitaplıktaki mevcut sorunlara göz atın. Yıldız düğmesini tıklayarak mevcut bir soruna oyunuzu ekleyebilirsiniz.
Daha fazla bilgi için Sorun İzleyici belgelerini inceleyin.
Sürüm 3.4
Sürüm 3.4.0-alpha04
10 Eylül 2025
androidx.paging:paging-*:3.4.0-alpha04 iptal edilir. 3.4.0-alpha04 sürümü bu commit'leri içerir.
API Değişiklikleri
- Hedef konuma en yakın olan ve giriş yüklemiyle eşleşen yüklenmiş öğeyi almak için yeni bir
PagingStateAPI'siclosestItemAroundPositioneklendi. Bu, ideal sabitlenebilir öğenin etrafta olduğu ancak tam hedef konumda olmadığı durumlarda öğe tabanlı yenileme anahtarları oluşturmak için kullanılabilir. (I96e5c, b/440187139)
Sürüm 3.4.0-alpha03
27 Ağustos 2025
androidx.paging:paging-*:3.4.0-alpha03 iptal edilir. 3.4.0-alpha03 sürümü bu commit'leri içerir.
Yeni Özellikler
- Paging-common, masaüstünü yeni bir Kotlin Multiplatform (KMP) hedefi olarak ekledi. Toplamda artık JVM(Android ve Masaüstü), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) ve Web (JavaScript, WasmJS) desteklenmektedir. (Id2483, b/436884811)
- Sayfalama testi, yeni Kotlin Multiplatform (KMP) hedefleri ekledi. Toplamda artık JVM(Android ve Masaüstü), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) ve Web (JavaScript, WasmJS) desteklenmektedir. (I0c543, b/435014650)
- Paging-compose, yeni Kotlin Multiplatform (KMP) hedefleri ekledi. Toplamda artık JVM(Android ve Masaüstü), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) ve Web (JavaScript, WasmJS) desteklenmektedir. (I70d44, b/436884801)
API Değişiklikleri
- Varsayılan minSdk'nın API 21'den API 23'e taşınması (Ibdfca, b/380448311, b/435705964, b/435705223)
Sürüm 3.4.0-alpha02
30 Temmuz 2025
androidx.paging:paging-*:3.4.0-alpha02 iptal edilir. 3.4.0-alpha02 sürümü bu commit'leri içerir.
API Değişiklikleri
PagingData.fromartıkplaceholdersBeforeveplaceholdersAfterayarlanmasına izin veriyor. Bu yer tutucular arasında gezinmenin yüklemeyi tetiklemediğini unutmayın. (I06983)
Sürüm 3.4.0-alpha01
2 Temmuz 2025
androidx.paging:paging-*:3.4.0-alpha01 iptal edilir. 3.4.0-alpha01 sürümü bu commit'leri içerir.
Yeni Özellikler
- Paging, aşağıdaki KMP hedeflerini ekledi: watchos, tvos, mingwX64, watchosDeviceArm64 ve linuxArm64. (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
Hata Düzeltmeleri
- Paging 3.3 veya sonraki sürümleri kullanan Android birim testleri artık
PagingLogger'dan (Ia9400, b/331684448) hata vermeyecek. - Kullanıcı
RecyclerViewgüncellenirken kaydırdığındaRecyclerViewöğesininIndexOutOfBoundsExceptionoluşturmasına neden olan hata düzeltildi (Id1f16, b/381024738) - Kaydırma sırasında yenileme yapılırken sayfalama işleminin daha fazla yükleme tetikleyememesine neden olan hata düzeltildi. (I60ca5, b/352586078)
- Sayfalama öğeleri yenilenirken kaydırma yapıldığında kilitlenme sorunu düzeltildi. (I8c65a, b/347649763)
Sürüm 3.3
Sürüm 3.3.6
12 Şubat 2025
androidx.paging:paging-*:3.3.6 iptal edilir. 3.3.6 sürümü bu commit'leri içerir.
Hata Düzeltmeleri
- İlk yenileme sırasında gönderilen yenileme ve yeniden deneme sinyalleri artık depolanacak ve Paging presenter hazır olduğunda otomatik olarak yeniden gönderilecek.
Harici Katkı (External Contribution)
Sürüm 3.3.5
11 Aralık 2024
androidx.paging:paging-*:3.3.5 iptal edilir. 3.3.5 sürümü bu commit'leri içerir.
Hata Düzeltmeleri
- Kullanıcı
RecyclerViewgüncellenirken kaydırdığındaRecyclerViewöğesininIndexOutOfBoundsExceptionhatası vermesine neden olan hata düzeltildi. (Id1f16, b/381024738)
Sürüm 3.3.4
13 Kasım 2024
androidx.paging:paging-*:3.3.4 iptal edilir. 3.3.4 sürümü bu commit'leri içerir.
Hata Düzeltmeleri
- Paging 3.3 veya sonraki sürümleri kullanan Android birim testleri artık
Method isLoggable in android.util.Log not mockedgibi bir hata vermeyecek. (Ia9400, b/331684448)
Sürüm 3.3.2
7 Ağustos 2024
androidx.paging:paging-*:3.3.2 iptal edilir. 3.3.2 sürümü bu commit'leri içerir.
Yeni Özellikler
paging-commonvepaging-testing,watchos,tvosvelinuxArm64olmak üzere yeni Kotlin Multiplatform hedefleri ekledi. (90c9768), (53e0eca)
Sürüm 3.3.1
24 Temmuz 2024
androidx.paging:paging-*:3.3.1 iptal edilir. 3.3.1 sürümü bu commit'leri içerir.
Hata Düzeltmeleri
AsyncPagingDataDifferveyaRecyclerViewile kullanılanPagingDataAdaptergibi üzerine kurulu API'lerin, kaydırma sırasında destekleyen veri kaynağı yenilendiğinde daha fazla yükleme tetikleyememesine neden olan sorun düzeltildi. (I60ca5, b/352586078)PagingDataAdapterveyaAsyncPagingDataDifferkullanılarakRecyclerViewkaydırılırken öğeler destekleyen veri kaynağından kaldırıldığında meydana gelen kilitlenme sorunu düzeltildi. (I8c65a, b/347649763)
Sürüm 3.3.0
14 Mayıs 2024
androidx.paging:paging-*:3.3.0 iptal edilir. 3.3.0 sürümü bu commit'leri içerir.
3.2.0 sürümünden beri yapılan önemli değişiklikler
PagingDataPresenterartık herkese açık bir sınıf. Çok platformlu sunucular artık dahili sayfalama API'leri veyapaging-runtime'ninAsyncPagingDataDiffer'sini gerektirmek yerinePagingDataPresenterüzerine kurulabilir.LoadStatesveCombinedLoadStatesyardımcı yöntemleri,LoadStates'nın sırasıyla Hata veyaNotLoadingdurumunda olup olmadığını kontrol etmek içinhasErrorveisIdle'ye eklendi. Ayrıca, yükleme işlemiNotLoadingveya hata durumuna yerleşene kadar bekleyenawaitNotLoading()Kotlin uzantısı yöntemi de eklendi.Flow<CombinedLoadStates>PagingData.empty(), oluşturucusuna özelLoadStatesgeçirilmediği sürece artık varsayılan olarakNotLoadingdurumlarını gönderir. Bu,PagingDataAdapteröğesine gönderildiğindeLoadStatesöğesinin gönderilmediği veyaLazyPagingItemsolarak toplandığında yükleme durumlarının gönderildiği mevcut davranıştan farklıdır.LazyPagingItemsolarak toplandığında, ilk oluşturma işleminden hemen sonra boş bir liste de gösterilir.
Kotlin Multiplatform Uyumluluğu
Paging artık Kotlin Multiplatform ile uyumlu yapılar sunuyor. Bu, büyük ölçüde CashApp'in multiplatform-paging projesinden gelen upstream çalışmalarından kaynaklanıyor.
paging-common, tüm Paging 3 API'lerinicommon'ye taşıdı ve artık Android'in yanı sıra jvm ve iOS ile de uyumlu.paging-testing, kodunucommon'ye taşıdı ve artık Android'in yanı sıra jvm ve iOS ile de uyumlu.paging-compose, kodunucommon'ye taşıdı veandroidx.compose'nin çoklu platform desteğine uygun bir Android yapısı gönderiyor.paging-runtime,paging-guava,paging-rxjava2vepaging-rxjava3yalnızca Android'de kullanılabilir.
Sürüm 3.3.0-rc01
1 Mayıs 2024
androidx.paging:paging-*:3.3.0-rc01, Paging 3.3.0-beta01'de herhangi bir değişiklik yapılmadan yayınlandı. 3.3.0-rc01 sürümü bu commit'leri içerir.
Sürüm 3.3.0-beta01
3 Nisan 2024
androidx.paging:paging-*:3.3.0-beta01 sürümünde önemli bir değişiklik yok. 3.3.0-beta01 sürümü bu commit'leri içerir.
Sürüm 3.3.0-alpha05
20 Mart 2024
androidx.paging:paging-*:3.3.0-alpha05 iptal edilir. 3.3.0-alpha05 sürümü bu commit'leri içerir.
API Değişiklikleri
- Sayfalama artık ortak kod için AndroidX Annotation
@MainThreadek açıklamasını kullanıyor. (I78f0d, b/327682438)
Sürüm 3.3.0-alpha04
6 Mart 2024
androidx.paging:paging-*:3.3.0-alpha04 iptal edilir. 3.3.0-alpha04 sürümü bu commit'leri içerir.
Hata Düzeltmeleri
- Kotlin çok platformlu uyumluluğunun eklenmesiyle ilgili küçük doküman hataları düzeltildi. (aosp/2950785)
Sürüm 3.3.0-alpha03
7 Şubat 2024
androidx.paging:paging-*:3.3.0-alpha03 iptal edilir. 3.3.0-alpha03 sürümü şu commit'leri içerir.
Yeni Özellikler
PagingDataPresenterartık herkese açık bir sınıf. Çok platformlu sunucular artık dahili sayfalama API'leri veyapaging-runtime'ninAsyncPagingDataDiffer'sini gerektirmek yerinePagingDataPresenterüzerine kurulabilir. (Id1f74, b/315214786)LoadStatesöğesinin hata veyaNotLoadingdurumunda olup olmadığını kontrol etmek için yeniLoadStatesveCombinedLoadStatesyardımcı yöntemleri eklendi. Ayrıca, yükNotLoadingveya hata durumuna yerleşene kadarLoadStateFlowüzerinde bekleyen yeni bir API eklendi. (Id6c67)
Davranış değişikliği
PagingData.empty(), oluşturucusuna özelLoadStatesgeçirilmediği sürece artık varsayılan olarakNotLoadingdurumlarını gönderir. Bu,PagingDataAdapteröğesine gönderildiğindeLoadStatesöğesinin gönderilmediği veyaLazyPagingItemsolarak toplandığında yükleme durumlarının gönderildiği mevcut davranıştan farklıdır.LazyPagingItemsolarak toplandığında, ilk oluşturma işleminden hemen sonra boş bir liste de gösterilir. (I4d11d, b/301833847)
Sürüm 3.3.0-alpha02
20 Eylül 2023
androidx.paging:paging-*:3.3.0-alpha02 iptal edilir. 3.3.0-alpha02 sürümü şu commit'leri içerir.
Kotlin Multiplatform Uyumluluğu
Paging artık Kotlin Multiplatform ile uyumlu yapılar sunuyor. Bu, büyük ölçüde CashApp'in multiplatform-paging projesinden gelen upstream çalışmalarından kaynaklanıyor. Bu sayede iki depo arasındaki farklılıkları önleyebilir ve depoları uyumlu tutabiliriz.
paging-common, tüm Paging 3 API'lerinicommon'ye taşıdı ve artık Android'in yanı sıra jvm ve iOS ile de uyumlu.paging-testing, kodunucommon'ye taşıdı ve artık Android'in yanı sıra jvm ve iOS ile de uyumlu.paging-compose, kodunucommon'ye taşıdı veandroidx.compose'nin çoklu platform desteğine uygun bir Android yapısı gönderiyor.paging-runtime,paging-guava,paging-rxjava2vepaging-rxjava3yalnızca Android'de kullanılabilir.
API Değişiklikleri
- Yalnızca şirket içi kullanım için tasarlanan herkese açık Logger arayüzünün desteği sonlandırıldı (I16e95, b/288623117).
Harici Katkı (External Contribution)
- Paging'in Kotlin Multiplatform'a taşınmasına yardımcı olan Cash App'ten veyndan'a teşekkür ederiz (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609).
Sürüm 3.3.0-alpha01
20 Eylül 2023
- Bu, androidx.paging kitaplıklarının ilk çok platformlu sürümüdür. Bu sürümde yalnızca
*-jvmve*-androidyapıtları var. macOS, iOS ve Linux varyantları için3.3.0-alpha02kullanın.
Sürüm 3.2
Sürüm 3.2.1
6 Eylül 2023
androidx.paging:paging-*:3.2.1 iptal edilir. 3.2.1 sürümü şu commit'leri içerir.
Hata Düzeltmeleri
asSnapshot(), yükleme işleminin ne zaman tamamlandığı hakkında bilgiye sahip olmadığından (PagingData.from(List, LoadStates)aşırı yüklemesinden farklı olarak)PagingData.from(List)kullanılarak oluşturulan bir Akış geçirildiğinde Paging Testing yapay nesnesininasSnapshot()API'sinin askıda kalmasına neden olan sorun düzeltildi. Bu geçici çözüm yalnızca tamamlanabilir akışlarda (ör.flowOf(PagingData.from(...))) işe yarar. Tamamlanamayan akışlarda (ör.MutableStateFlow,LoadStatessağlayanPagingData.fromaşırı yükünü kullanın. (I502c3)- Paging Compose, yükleme tamamlandığında yeni verilerin aynı çerçevede kullanılabilmesini sağlamak için artık dahili olarak
AndroidUiDispatcher.Mainkullanıyor. (Ia55af)
Sürüm 3.2.0
26 Temmuz 2023
androidx.paging:paging-*:3.2.0 iptal edilir. 3.2.0 sürümü şu commit'leri içerir.
3.1.0 sürümünden beri yapılan önemli değişiklikler
- Paging Compose, API kararlılığına ulaştı ve Paging'in geri kalanıyla birleştirildi. Artık sürümü diğer tüm Paging yapılarıyla eşleşiyor. 3.1.0 sürümünden beri yapılan değişiklikler:
PagingData.from(fakeData)oluşturup buPagingDataöğesiniMutableStateFlowiçine sarmalayarak (ör.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) sahte verilerin listesini önizleme desteği. Önizlemek için bu akışıcollectAsLazyPagingItems()alıcısı olarak@Previewcomposable'larına iletin.LazyVerticalGridveHorizontalPagergibi tüm geç yüklenen düzenlerin yanı sıra Wear ve TV kitaplıklarındaki özel geç yüklenen bileşenler için destek. Bu,LazyPagingItems,itemKeyveitemContentTypeadlı yeni alt düzey uzantı yöntemleriyle elde edildi. Bu yöntemler,keyvecontentTypeparametreleriniLazyColumn,LazyVerticalGridiçin mevcut olan standartitemsAPI'lerine veHorizontalPagergibi API'lerdeki eşdeğerlerine uygulamanıza yardımcı olur.- Yalnızca
LazyListScope'ı destekleyenitems(lazyPagingItems)veitemsIndexed(lazyPagingItems)kullanımdan kaldırıldı.
- Uygulamanızın her katmanının birim testi ve Paging ile entegrasyonu için ayrı ayrı tasarlanmış API'ler sağlayan yeni
paging-testingyapısı. Örneğin, şunları içerir:- Kendi özel
PagingSourceuygulamanızın davranışını Pager'dan ve gerçek kullanıcı arayüzünden bağımsız olarak doğrulamanıza olanak tanıyanTestPagersınıfı. -
asPagingSourceFactoryFlow<List<Value>>veya statikList<Value>öğesini testlerde Pager'a iletilebilecek birPagingSourceFactoryöğesine dönüştürmek için API'ler asSnapshotKotlin uzantısı,Flow<PagingData<Value>>dilini doğrudanList<Value>diline çevirir.Flow<PagingData<Value>>asSnapshot lambda,scrollToveyaappendScrollWhilegibi API'ler aracılığıyla uygulamanızın kullanıcı arayüzünü taklit etmenize olanak tanır. Böylece, verilerin anlık görüntüsünün, sayfalandırılmış verilerinizin herhangi bir noktasında doğru olduğunu doğrulayabilirsiniz.
- Kendi özel
- Sayfalama hata ayıklama bilgilerini iki düzeyde (
VERBOSEveDEBUG) göstermek için varsayılan günlükler eklendi. Günlükler,adb shell setprop log.tag.Paging [DEBUG|VERBOSE]komutuyla etkinleştirilebilir. Bu durum, hem görünümlerle sayfalama hem de Compose ile sayfalama için geçerlidir. CoroutineDispatcheryerineCoroutineContextkabul edenPagingDataAdapterveAsyncPagingDataDifferiçin oluşturucular eklendi.- Önceki () ->
PagingSourcelambda'lara kıyasla daha açık bir API yüzeyi sağlayan yeni birPagingSourceFactoryişlevsel arayüz eklendi. Bu fabrika, bir Pager'ı başlatmak için kullanılabilir.
Sürüm 3.2.0-rc01
21 Haziran 2023
androidx.paging:paging-*:3.2.0-rc01 iptal edilir. 3.2.0-rc01 sürümü şu commit'leri içerir.
Harici Katkı (External Contribution)
- Veyndan'a, Paging'in Android/JVM'ye özgü özelliklerden uzaklaşmasına katkıda bulunduğu için teşekkür ederiz. (#553, #554, #555, #559)
Sürüm 3.2.0-beta01
7 Haziran 2023
androidx.paging:paging-*:3.2.0-beta01 iptal edilir. 3.2.0-beta01 sürümü şu commit'leri içerir.
Paging Compose
- Paging Compose, API kararlılığına resmen ulaştı. Bu nedenle, sürüm
1.0.0-alpha20olarak güncellendi ve artık diğer tüm Sayfalama yapılarının sürümüyle eşleşiyor.
API Değişiklikleri
- Kullanımdan kaldırılan
items(LazyPagingItems)veitemsIndexed(LazyPagingItems)API'leri Paging Compose'dan kaldırıldı. Yerine kullanılan API'lere örnek için Paging Compose1.0.0-alpha20sürüm notlarına bakın. (I9626e)
Sürüm 3.2.0-alpha06
24 Mayıs 2023
androidx.paging:paging-*:3.2.0-alpha06 iptal edilir. 3.2.0-alpha06 sürümü şu commit'leri içerir.
Yeni Özellikler
- Mevcut
() -> PagingSourcelambda'lardan daha açık bir API yüzeyi sağlayan yeni birPagingSourceFactoryişlevsel arayüz eklendi. Bu fabrika,Pageroluşturmak için kullanılabilir. (I33165, b/280655188) - Yalnızca değişmez bir veri listesinden yüklenen bir
PagingSourceFactoryalmak için yenipaging-testingAPI'siList<Value>.asPagingSourceFactory()eklendi.Flow<List<Value>>adresindeki mevcut uzantı, birden fazla statik veri nesliyle test için kullanılmaya devam etmelidir. (Id34d1, b/280655188)
API Değişiklikleri
- Sayfalama testindeki tüm herkese açık API'ler artık
@VisibleForTestingile açıklama eklenmiş durumda. Böylece bu API'lerin yalnızca testlerde kullanılması sağlanıyor. (I7db6e) asSnapshotAPI'de artıkCoroutineScopeiletmek gerekmiyor. Artık varsayılan olarak üst kapsamdan devralınan bağlamı kullanır. (Id0a78, b/282240990)TestPageroluşturucu parametreleri, gerçekPageroluşturucu parametrelerinin sırasıyla sezgisel olarak eşleşecek şekilde yeniden sıralandı (I6185a).- Sayfalama testinin lambda türü
() -> PagingSource<Key, Value>kullanımınıPagingSourceFactory<Key, Value>türüne taşıdı. (I4a950, b/280655188)
Davranış Değişiklikleri
asSnapshotÇağrı testleri çalıştırmak için artık ana dağıtıcı gerekmiyor. Bu ayar artık test davranışında herhangi bir değişikliğe neden olmuyor. (Ie56ea)
Sürüm 3.2.0-alpha05
3 Mayıs 2023
androidx.paging:paging-*:3.2.0-alpha05 iptal edilir. 3.2.0-alpha05 sürümü şu commit'leri içerir.
API Değişiklikleri
asSnapshotPaging Testing API'si artıkloadOperationsparametresini varsayılan olarak boş bir lambda'ya ayarlıyor. Bu, ilk yenileme yükünden verileri almak için herhangi bir yük işlemi geçirmedenasSnapshotçağrılmasına olanak tanır. (Ied354, b/277233770)
Belgelerdeki İyileştirmeler
asPagingSourceFactory()ile ilgili dokümanları, bununFlowüzerinde bir uzantı yöntemi olduğunu vePagingSourceörnekleri oluşturmak için yeniden kullanılabilir bir fabrika döndürdüğünü açıklayacak şekilde güncelledik. (I5ff4f, I705b5)LoadResult.PageOluşturucu ile ilgili doküman, atlama özelliğini desteklemek içinitemsBeforeveitemsAfterdeğerlerinin geçersiz kılınması gerektiğini açıklayacak şekilde güncellendi. (Ied354)
Harici Katkılar
- Veyndan'a, Paging'in Android/JVM'ye özgü özelliklerden uzaklaşmasına katkıda bulunduğu için teşekkür ederiz. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
Sürüm 3.2.0-alpha04
8 Şubat 2023
androidx.paging:paging-*:3.2.0-alpha04 iptal edilir. 3.2.0-alpha04 sürümü şu commit'leri içerir.
Sayfalama Testi
paging-testingyapısı artık bir Pager'a sağlanacakFlow<List<Value>>öğesindenpagingSourceFactoryoluşturmak içinasPagingSourceFactoryyöntemini içeriyor. Akıştan yayılan herList<Value>>, Sayfalandırılmış verilerin oluşturulmasını temsil eder. Bu, örneğin,PagingDatadönüşümlerinde sayfalama testlerini kolaylaştırır. Bunun için, Pager'ın veri toplamak üzere kullanacağı bir veri kaynağı taklit edilir. (I6f230, b/235528239)paging-testingyapısı,Flow<PagingData<T>>içinde yer alan verilerin doğru olduğunu doğrulamaya uygun yeni API'lerle genişletildi. Bu, örneğin ViewModel katmanınızdaki birFlow<PagingData<T>>işlevinin çıktısını onaylamak için kullanılabilir.Bu işlem,
asSnapshotKotlin uzantısı kullanılarak yapılır. Bu uzantı,Flow<PagingData<Value>>öğesini doğrudanList<Value>öğesine çevirir.Flow<PagingData<Value>>asSnapshotlambda'sı,scrollToveyaappendScrollWhilegibi API'ler aracılığıyla uygulamanızın kullanıcı arayüzünü tekrarlanabilir ve tutarlı bir şekilde taklit etmenize olanak tanır. Böylece, verilerin anlık görüntüsünün, sayfalara ayrılmış verilerinizin herhangi bir noktasında doğru olduğunu doğrulayabilirsiniz.// 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 valuesasSnapshot,runTestiçinde çalıştırılması beklenen birsuspendyöntemidir. Daha fazla bilgi için Android'de Kotlin eşyordamlarını test etme başlıklı makaleyi inceleyin. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
API Değişiklikleri
AsyncPagingDataDiffervePagingDataAdapter'dekigetItemvepeekkullanıcı arayüzü çağrıları artık yalnızca ana iş parçacığında çağrılabilir olarak doğru şekilde işaretleniyor. (I699b6)TestPagertarafından kullanılan genel türlerden joker karakterler kaldırıldı. Böylece, bu yöntemlerin sonuçlarını Java programlama dilinde yazılmış kodda kullanmak kolaylaştı. (I56c42)
Sürüm 3.2.0-alpha03
24 Ekim 2022
androidx.paging:paging-*:3.2.0-alpha03 iptal edilir. 3.2.0-alpha03 sürümü şu commit'leri içerir.
Sayfalama Testi
Bu sürümde yeni bir yapı var: paging-testing. Bu yapay nesne, uygulamanızın her katmanının birim testini ve Paging ile entegrasyonunu ayrı ayrı yapmaya yönelik API'ler sağlar.
Örneğin, bu ilk sürümde, kendi özel PagingSource uygulamanızın davranışını Pager ve normalde uçtan uca sayfalama entegrasyonunu simüle etmek için ihtiyacınız olacak gerçek kullanıcı arayüzünden bağımsız olarak doğrulamanıza olanak tanıyan bir TestPager sınıfı bulunur.
TestPager, Pager öğesinin gerçek uygulamasını yansıtırken PagingSource öğesini test etmek için basitleştirilmiş bir API yüzeyi sağlayan bir sahte, yani bir test çifti olarak kabul edilmelidir. Bu API'ler suspend API'leridir ve Android'de Kotlin eşyordamlarını test etme kılavuzunda belirtildiği gibi runTest içinde çalıştırılmalıdır.
Bu API'lerin kullanımına ilişkin bir örneği, TestPager kullanmak üzere yeniden düzenlenmiş olan room-paging testlerinde bulabilirsiniz.
API Değişiklikleri
LoadResult.Page.dataileLoadResult.Page.iterator()arasında kolay yineleme yapılmasını sağlar. Bu,PagingSource.getRefreshKeyyöntemine iletilenPagingStateöğesininpagesözelliği gibi birList<LoadResult.Page>verildiğinde Kotlin standart kitaplığıflattenyönteminin dolaylı olarak kullanılmasına olanak tanır. (Ie0718)
Sürüm 3.2.0-alpha02
10 Ağustos 2022
androidx.paging:paging-*:3.2.0-alpha02 iptal edilir. 3.2.0-alpha02 sürümü şu commit'leri içerir.
Yeni Özellikler
- Sayfalama artık
AsyncPagingDataDifferveyaPagingDataAdaptersınıfları aracılığıyla günlükler sağlayarakPagingData'dan toplanan hata ayıklama bilgilerini gösterir. - Günlükler,
adb shellkomutuyla etkinleştirilebiliradb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159)
Hata Düzeltmeleri
paging-common:3.2.0-alpha01,paging-runtime:3.1.1veya daha eski bir çalışma zamanı ile kullanılırken eksikPagingDataDifferoluşturucu hatası düzeltildi.(b/235256201)
Sürüm 3.2.0-alpha01
1 Haziran 2022
androidx.paging:paging-*:3.2.0-alpha01 iptal edilir. 3.2.0-alpha01 sürümü şu commit'leri içerir.
API Değişiklikleri
CoroutineDispatcheryerineCoroutineContextkabul edenPagingDataAdapterveAsyncPagingDataDifferiçin oluşturucular eklendi. (Idc878)- Varsayılan olarak,
PagingData.from()vePagingData.empty()artık sunuyu yapan tarafındaCombinedLoadStates'ı etkilemeyecek.sourceLoadStatesveremoteLoadStatesdeğerlerinin bu oluşturuculara iletilmesine olanak tanıyan yeni bir aşırı yükleme,LoadStatesdeğerinin tamamen sonlandırıcı olarak ayarlanmasıyla ilgili mevcut davranışı korumak için eklendi (ör.NotLoading(endOfPaginationReached = false)) seçeneğini kullanabilirsiniz. Gerekirse uzak eyaletleri de dahil edebilirsiniz.LoadStatesgeçirilmezse statikPagingDataalındığında öncekiCombinedLoadStates, sunum yapan tarafında korunur. (Ic3ce5, b/205344028)
Hata Düzeltmeleri
- Boş değer döndüreceği ancak boş olmayan bir
initialKeydeğerinin ayarlandığı durumlardaPagingSource.getRefreshKey()işlevinin sonucu artıkinitialKeyişlevinin sonucuna göre doğru şekilde önceliklendiriliyor. (Ic9542, b/230391606)
Harici Katkı (External Contribution)
- test-coroutines-lib taşıma işlemi nedeniyle :compose:ui:ui-test API'si (updateApi) güncellendi (I3366d).
Sürüm 3.1
Sürüm 3.1.1
9 Mart 2022
androidx.paging:paging-*:3.1.1 iptal edilir. 3.1.1 sürümü şu commit'leri içerir.
Hata Düzeltmeleri
.cachedIn()tarafından yanlışlıkla eklenen, nesiller arasındaki araLoadState.NotLoadingetkinlikleri kaldırıldı. Bu değişiklik, başarısız yüklemeler yeniden denenirken, yenileme sırasında veya geçersiz kılma sırasında oluşturulan gereksizLoadState.NotLoadingetkinlikleri kaldırarakLoadStatedeğişikliklere tepki vermeyi çok daha kolay hale getirir.
Sürüm 3.1.0
17 Kasım 2021
androidx.paging:paging-*:3.1.0 iptal edilir. 3.1.0 sürümü şu commit'leri içerir.
3.0.0 sürümünden beri yapılan önemli değişiklikler
Flow<PagingData>.observableveFlow<PagingData>.flowableAPI'leri artık deneysel değildir.LoadStateile ilgili davranış değişiklikleri:endOfPaginationReached, artık hemPagingSourcehem deRemoteMediatoriçinLoadType.REFRESH'de her zamanfalse- Sayfalandırma'daki
LoadStatesartık aşağı akışa yayınlanmadan önce hemPagingSourcehem deRemoteMediator'den geçerli değerler bekliyor. Yeni nesilPagingData, artık yenileme durumu için her zaman doğru şekildeLoadingile başlayacak ve bazı durumlarda yanlışlıklaNotLoadingolarak sıfırlanmayacak. - Sunucu API'lerindeki
.loadStateFlowve.addLoadStateListenerartık her zaman aracı durumlarınınnullolarak ayarlandığı gereksiz bir ilkCombinedLoadStatesgöndermiyor.
- Geçmiş nesillerde iptal işlemi artık geçersiz kılma / yeni nesillerde hemen gerçekleşiyor.
Flow<PagingData>üzerinde.collectLatestkullanmak artık zorunlu olmasa da yine de önerilir. PagingSource.LoadResult.Invalid,PagingSource.load'den yeni bir dönüş türü olarak eklendi. Bu durum, Paging'in buPagingSourceiçin bekleyen veya gelecekteki tüm yükleme isteklerini atmasına ve geçersiz kılmasına neden oluyor. Bu dönüş türü, veritabanından veya ağdan döndürülebilecek geçersiz veya eski verileri işlemek için tasarlanmıştır.- Kullanıcı arayüzünde sayfalar sunulurken eşzamanlı olarak tetiklenen
.onPagesPresentedve.addOnPagesUpdatedListenersunucu API'leri eklendi. Sayfa güncellemeleri aşağıdaki senaryolarda gerçekleşebilir:- Yeni nesil PagingData'nın ilk yüklemesi, yeni nesil sunulan öğelerde herhangi bir değişiklik içerip içermediğine bakılmaksızın tamamlanır. Örneğin: Liste tamamen aynı olduğundan ilk yüklemeyi güncelleme olmadan tamamlayan yeni nesil yine de bu geri aramayı tetikler.
- Eklenen sayfa yeni öğeler içermese bile bir sayfa eklenir.
- Sayfa boş olsa bile bırakılır.
Sürüm 3.1.0-rc01
3 Kasım 2021
androidx.paging:paging-*:3.1.0-rc01 iptal edilir. 3.1.0-rc01 sürümü şu commit'leri içerir.
Hata Düzeltmeleri
- Gözlemci yokken veya bir gözlemci yeni bir PagingData'ya geçerken Paging tarafından birden fazla yükleme etkinliğinin aşağı akışa gönderildiği durumlarda .cachedIn() içinde yarış durumu ve bellek sızıntısı sorunu düzeltildi. (Ib682e)
Sürüm 3.1.0-beta01
13 Ekim 2021
androidx.paging:paging-*:3.1.0-beta01 iptal edilir. 3.1.0-beta01 sürümü şu commit'leri içerir.
Hata Düzeltmeleri
- Çok sayıda hızlı öğe erişiminin, öğelerin prefetchDistance'ta değerlendirilmeden bırakılmasına ve sayfa yüklemelerinin durmasına neden olabildiği sorun düzeltildi. Bu durum, özellikle birçok öğe, kullanıcının kaydırma yönüne karşı yüklemeye öncelik verecek şekilde aynı anda düzenlendiğinde sorun yaratır. Bu öğe erişimleri artık arabelleğe alınır ve bırakılmalarını önlemek için eşzamanlı olarak önceliklendirilir. (aosp/1833273)
Sürüm 3.1.0-alpha04
29 Eylül 2021
androidx.paging:paging-*:3.1.0-alpha04 iptal edilir. 3.1.0-alpha04 sürümü şu commit'leri içerir.
API Değişiklikleri
Flow<PagingData>.observableveFlow<PagingData>.flowableAPI'leri artık deneysel değildir. (Ie0bdd)
Hata Düzeltmeleri
- LoadStates için
endOfPaginationReachedartıkLoadType.REFRESHiçin her zamanfalseolur. Daha önce, RemoteMediatorREFRESHiçin endOfPaginationReached değerinintrueolması mümkündü ancak PagingSource için bu mümkün değildi. Bu davranış artık her zamanfalsedöndürecek şekilde birleştirildi. REFRESH'in sonlandırıcı olması hiçbir zaman mantıklı olmadığından bu davranış artık LoadStates'teki API sözleşmesinin bir parçası olarak belgeleniyor. Sayfalandırmanın sonlandırılıp sonlandırılmayacağına karar verirken her zaman APPEND veya PREPEND yönlerini dikkate almanız gerekir. (I047b6) Paging'deki LoadStates artık nesiller arasında aşağı akışa yayınlanmadan önce hem PagingSource hem de RemoteMediator'dan geçerli değerler bekliyor. Bu, PagingData'nın yeni nesillerinin, CombinedLoadStates.source.refresh içinde NotLoading göndermesini engeller. Bu, zaten Loading durumundaysa PagingData'nın yeni nesilleri artık yenileme durumu için her zaman doğru şekilde Loading ile başlayacak ve bazı durumlarda önce yanlışlıkla NotLoading'e sıfırlanmayacak.
Geçmiş nesillerde iptal işlemi artık geçersiz kılma/yeni nesillerde hızlı bir şekilde gerçekleşiyor.
Flow<PagingData>üzerinde .collectLatest kullanmak artık zorunlu olmasa da bu işlem hâlâ önemle tavsiye edilir. (I0b2b5, b/177351336, b/195028524)Sunucu API'lerindeki
.loadStateFlowve.addLoadStateListenerartık her zaman aracı durumlarınullve kaynak durumlarıNotLoading(endOfPaginationReached = false)olarak ayarlanmış olan ilkCombinedLoadStates'ı gereksiz yere göndermiyor. Bunun anlamı:- RemoteMediator'ı kullanıyorsanız aracı durumları her zaman doldurulur.
.loadStateFlowüzerinde yeni bir loadState dinleyicisi veya yeni bir toplayıcı kaydetmek,PagingDatakaynağından gerçek birCombinedLoadStatesalmadıysa artık mevcut değeri hemen yayınlamaz. Bu durum, bir toplayıcı veya dinleyiciPagingDatagönderilmeden önce başlatılırsa meydana gelebilir. (I1a748)
Sürüm 3.1.0-alpha03
21 Temmuz 2021
androidx.paging:paging-*:3.1.0-alpha03 iptal edilir. 3.1.0-alpha03 sürümü şu commit'leri içerir.
API Değişiklikleri
PagingSource'a üçüncü bir LoadResult dönüş türü olan LoadResult.Invalid eklenir. Bir PagingSource.load, LoadResult.Invalid değerini döndürdüğünde, sayfalama yüklenen verileri siler ve PagingSource'u geçersiz kılar. Bu dönüş türü, veritabanından veya ağdan döndürülebilecek geçersiz veya eski verileri işlemek için tasarlanmıştır.
Örneğin, temel alınan veritabanına yazma işlemi yapılıp PagingSource zamanında geçersiz kılınmazsa yüklediği destekleyici veri kümesinin değişmezliğine bağlı olarak tutarsız sonuçlar döndürebilir (ör. LIMIT OFFSET stilindeki VT uygulamaları). Bu senaryoda, yükleme işleminden sonra geçersiz kılma işleminin kontrol edilmesi ve LoadResult.Invalid değerinin döndürülmesi önerilir. Bu değer, Paging'in bu PagingSource'a yönelik bekleyen veya gelecekteki tüm yükleme isteklerini silmesine ve PagingSource'u geçersiz kılmasına neden olur.
Bu dönüş türü, LivePagedList veya RxPagedList'ten yararlanan Paging2 API'si tarafından da desteklenir. Paging2'nin PagedList API'leri ile bir PagingSource kullanıldığında PagedList hemen ayrılır. Bu PagedList'e veri yükleme girişimleri durdurulur ve PagingSource'ta geçersiz kılma işlemi tetiklenir.
LoadResult, kapalı bir sınıftır. Bu nedenle, PagingSource.load sonuçlarını doğrudan kullanan kullanım alanlarının derleme zamanında LoadResult.Invalid'i işlemesi gerekecek şekilde kaynakla uyumlu olmayan bir değişikliktir. Örneğin, dönüş türünü kontrol etmek için exhaustive-when'den yararlanan Kotlin kullanıcılarının geçersiz tür için bir kontrol eklemesi gerekir. (Id6bd3, b/191806126, b/192013267)
Hata Düzeltmeleri
- PagingSource.registerInvalidatedCallback veya DataSource.addInvalidatedCallback aracılığıyla eklenen geçersiz kılma geri çağırmaları, önceden geçersiz kılınmış bir PagingSource / DataSource üzerinde kaydedilmişlerse artık otomatik olarak tetikleniyor. Bu düzeltme, ilk yükleme sırasında zaten geçersiz olan bir kaynak sağlandığında Paging'in geçersiz kılma sinyallerini bırakmasına ve takılmasına neden olan yarış durumunu giderir. Ayrıca, geçersiz kılma geri çağırmaları artık en fazla bir kez çağrılacağı garanti edildiğinden tetiklendikten sonra düzgün şekilde kaldırılıyor. (I27e69)
- Yeni oluşturulan bir PagedList akışından yer tutucu başlangıç değerini (InitialPagedList) gönderme. Örneğin: LivePagedListBuilder veya RxPagedListBuilder artık daha önce yüklenen verileri temizlemeyecek.
Sürüm 3.1.0-alpha02
1 Temmuz 2021
androidx.paging:paging-*:3.1.0-alpha02 iptal edilir. 3.1.0-alpha02 sürümünde şu commit'ler bulunur.
Yeni Özellikler
Sunulan sayfalar kullanıcı arayüzünde güncellendikten hemen sonra tetiklenen onPagesPresented işleyicisi ve akış sunucusu API'leri eklendi.
Bu güncellemeler kullanıcı arayüzüyle senkronize olduğundan, güncelleme uygulandıktan sonra durumu incelemek için .snapshot, .getItemCount gibi bağdaştırıcı yöntemlerini çağırabilirsiniz. .snapshot() işlevinin, her güncellemede yapılması maliyetli olabileceğinden açıkça çağrılması için bırakıldığını unutmayın.
Sayfa güncellemeleri aşağıdaki senaryolarda gerçekleşebilir:
- Yeni nesil PagingData'nın ilk yüklemesi, yeni nesil sunulan öğelerde herhangi bir değişiklik içerip içermediğine bakılmaksızın tamamlanır. Örneğin: Liste tamamen aynı olduğundan ilk yüklemeyi güncelleme olmadan tamamlayan yeni nesil yine bu geri çağırmayı tetikleyecektir.
- Eklenen sayfa yeni öğeler içermese bile sayfa eklenir.
- Bırakılan sayfa boş olsa bile sayfa bırakılır (I272c9, b/189999634)
Hata Düzeltmeleri
- PagedList.dataSource'a LivePagedList veya RxPagedList tarafından oluşturulan ilk değerden erişildiğinde artık yanlışlıkla IllegalStateException (I96707) istisnası oluşturulmayacak.
Sürüm 3.1.0-alpha01
2 Haziran 2021
androidx.paging:paging-*:3.1.0-alpha01 iptal edilir. 3.1.0-alpha01 sürümü şu commit'leri içerir.
API Değişiklikleri
paging-rxjava3tarafından sağlanan sınıflar artıkpaging-rxjava2ile çakışmamaları içinandroidx.paging.rxjava3paketi altında yer alıyor (Ifa7f6)
Hata Düzeltmeleri
- Sayfalama'nın bazen RecyclerView'a no-op farklılık etkinlikleri göndermesine ve bunun da belirli dinleyicilerin erken tetiklenmesine neden olabilen sorun düzeltildi. (Ic507f, b/182510751)
Harici Katkı (External Contribution)
- Kullanımdan kaldırılan PagedList uyumluluk API'leri rxjava3 yapay ürününe eklendi (Id1ce2, b/182497591)
Paging Compose Version 1.0.0
Sürüm 1.0.0-alpha20
24 Mayıs 2023
androidx.paging:paging-compose:1.0.0-alpha20 iptal edilir. Version 1.0.0-alpha20 contains these commits.
Yeni Özellikler
- Paging Compose artık
PagingData.from(fakeData)oluşturup buPagingDataöğesiniMutableStateFlowiçine sarmalayarak sahte verilerin listesini önizlemeyi destekliyor (ör.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Bu verileri@Previewgirişiniz olarak kullanarakcollectAsLazyPagingItems()'ye yapılan aramalar, önizlenebilirLazyPagingItemssağlar. (I8a78d, b/194544557)
Hata Düzeltmeleri
pager.flow.cachedIn'danLazyPagingItemsiçinde toplanan önbelleğe alınmış veriler, artık durum geri yükleme işleminden sonra eşzamansız toplama gerektirmeden anında kullanılabilir. Bu, durum geri yüklendikten sonra ilk oluşturma işleminde önbelleğe alınan verilerin hemen sunulmaya hazır olacağı anlamına gelir. (I97a60, b/177245496)
Sürüm 1.0.0-alpha19
3 Mayıs 2023
androidx.paging:paging-compose:1.0.0-alpha19 iptal edilir. 1.0.0-alpha19 sürümü şu commit'leri içerir.
Tüm geç yükleme düzenlerini destekleme
Daha önce Paging Compose, LazyListScope üzerinde özel items ve itemsIndexed uzantıları sağlıyordu. Bu nedenle, Paging Compose'u LazyVerticalGrid, HorizontalPager gibi diğer tembel düzenlerle veya Wear ve TV kitaplıkları tarafından sağlanan diğer özel tembel bileşenlerle kullanamıyordunuz. Bu esnek olmama durumunu ele almak, bu sürümdeki temel güncellemedir.
Daha fazla tembel düzeni desteklemek için API'leri farklı bir katmanda oluşturmamız gerekiyordu. Paging Compose, her tembel düzen için özel bir items API sağlamak yerine artık itemKey ve itemContentType içinde LazyPagingItems üzerinde biraz daha düşük düzeyli uzantı yöntemleri sunuyor. Bu API'ler, key ve contentType parametrelerini LazyColumn, LazyVerticalGrid için halihazırda mevcut olan standart items API'lere ve HorizontalPager gibi API'lerdeki eşdeğerlerine uygulamanıza yardımcı olmaya odaklanır. (Ifa13b, Ib04f0, b/259385813)
Bu, LazyVerticalGrid karakterinin desteklenmesinin şu şekilde görüneceği anlamına gelir:
// 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)
}
}
Bu yeni API'lerin kullanımına dair daha fazla örnek için lütfen örneklerimize göz atın.
Bu değişiklikler LazyColumn ve LazyRow örneklerini birkaç satır daha uzun hale getirse de Paging Compose'u kullanacaklar için tüm tembel düzenlerde tutarlılığın önemli bir faktör olduğunu düşündük. Bu nedenle, LazyListScope için mevcut uzantıların desteği sonlandırıldı. (I0c459, I92c8f, b/276989796)
API Değişiklikleri
- Yeni API'lere geçişi kolaylaştırmak için
LazyListScopeüzerindekiitemsveitemsIndexeduzantı işlevleri artık yeni API'lerdeki desteği yansıtan bircontentTypeparametresini destekliyor. (Ib1918, b/255283378)
Bağımlılık Güncellemeleri
- Paging Compose, bağımlılığını Compose 1.0.5'ten Compose 1.2.1'e güncelledi. (Ib1918, b/255283378)
Sürüm 1.0.0-alpha18
8 Şubat 2023
androidx.paging:paging-compose:1.0.0-alpha18, herhangi bir değişiklik yapılmadan yayınlanır. 1.0.0-alpha18 sürümü şu commit'leri içerir.
Sürüm 1.0.0-alpha17
24 Ekim 2022
androidx.paging:paging-compose:1.0.0-alpha17 iptal edilir. 1.0.0-alpha17 sürümü şu commit'leri içerir.
Yeni Özellikler
CoroutineContextaranırken özelcollectLazyPagingItemsdesteği eklendi. (I7a574, b/243182795, b/233783862)
Sürüm 1.0.0-alpha16
10 Ağustos 2022
androidx.paging:paging-compose:1.0.0-alpha16 iptal edilir. 1.0.0-alpha16 sürümü şu commit'leri içerir.
Yeni Özellikler
- Sayfalama artık
LazyPagingItemssınıfı aracılığıyla günlükler sağlayarak PagingData'dan toplanan hata ayıklama bilgilerini gösterir. - Günlükler,
adb shellkomutuadb shell setprop log.tag.Paging [DEBUG|VERBOSE]ile etkinleştirilebilir. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Hata Düzeltmeleri
paging-compose:1.0.0-alpha15,paging-common:3.1.1veya daha eski bir sürümle kullanılırkenPagingDataDifferoluşturucu hatasının eksik olması sorunu düzeltildi.(b/235256201,b/239868768)
Sürüm 1.0.0-alpha15
1 Haziran 2022
androidx.paging:paging-compose:1.0.0-alpha15 iptal edilir. 1.0.0-alpha15 sürümü şu commit'leri içerir.
API Değişiklikleri
CoroutineDispatcheryerineCoroutineContextkabul edenPagingDataAdapterveAsyncPagingDataDifferiçin oluşturucular eklendi. (Idc878)
Hata Düzeltmeleri
LazyPagingItemsartık ilkloadStatedeğeriniLoadState.Loadingyenileme olarak ayarlıyor. (I55043, b/224855902)
Sürüm 1.0.0-alpha14
13 Ekim 2021
androidx.paging:paging-compose:1.0.0-alpha14 iptal edilir. 1.0.0-alpha14 sürümü şu commit'leri içerir.
Sürüm 1.0.0-alpha13
29 Eylül 2021
androidx.paging:paging-compose:1.0.0-alpha13 iptal edilir. 1.0.0-alpha13 sürümü şu commit'leri içerir.
API Değişiklikleri
LazyPagingItems.snapshot()işlevi,LazyPagingItems.itemSnapshotListözelliğiyle (Ie2da8) değiştirildi.- Desteği sonlandırılan
LazyPagingItems.getAsState()kaldırıldı (Ie65e4)
Sürüm 1.0.0-alpha12
21 Temmuz 2021
androidx.paging:paging-compose:1.0.0-alpha12 iptal edilir. Version 1.0.0-alpha12 contains these commits.
API Değişiklikleri
items(lazyPagingItems)veitemsIndexed(lazyPagingItems),LazyColumn/Rowile sayfalama bağlantısı oluşturmak için kullanılır. Bu parametreler artık öğeyi temsil eden sabit bir anahtar belirtmenize olanak tanıyan option key parametresini kabul ediyor. Anahtarlar hakkında daha fazla bilgiyi burada bulabilirsiniz. (I7986d)lazyPagingItems.getAsState(index)işlevi artık kullanımdan kaldırıldı. Bunun yerinelazyPagingItems[index]politikasını kullanın. (I086cb, b/187339372)
Sürüm 1.0.0-alpha11
30 Haziran 2021
androidx.paging:paging-compose:1.0.0-alpha11 iptal edilir. 1.0.0-alpha11 sürümü şu commit'leri içerir.
Sürüm 1.0.0-alpha10
2 Haziran 2021
androidx.paging:paging-compose:1.0.0-alpha10 iptal edilir. Version 1.0.0-alpha10 contains these commits.
Sürüm 1.0.0-alpha09
18 Mayıs 2021
androidx.paging:paging-compose:1.0.0-alpha09 iptal edilir. Version 1.0.0-alpha09 contains these commits.
Hata Düzeltmeleri
- LazyPagingItems'ın itemCount ve item getter'ı artık gözlemlenebilir. Bu sayede LazyVerticalGrid ile de kullanılabilir (Ie2446, b/171872064, b/168285687).
Compose Uyumluluğu
androidx.paging:paging-compose:1.0.0-alpha09yalnızca1.0.0-beta07ve sonraki Compose sürümleriyle uyumludur.
Sürüm 1.0.0-alpha08
24 Şubat 2021
androidx.paging:paging-compose:1.0.0-alpha08 iptal edilir. Version 1.0.0-alpha08 şu commit'leri içerir.
Compose 1.0.0-beta01 ile entegre olacak şekilde güncellendi.
Sürüm 1.0.0-alpha07
10 Şubat 2021
androidx.paging:paging-compose:1.0.0-alpha07 iptal edilir. 1.0.0-alpha07 sürümü şu commit'leri içerir.
Compose alpha12 ile entegre olacak şekilde güncellendi.
Sürüm 1.0.0-alpha06
28 Ocak 2021
androidx.paging:paging-compose:1.0.0-alpha06 iptal edilir. 1.0.0-alpha06 sürümü şu commit'leri içerir.
Hata Düzeltmeleri
Compose 1.0.0-alpha11'e bağlı olacak şekilde güncellendi.
Sürüm 1.0.0-alpha05
13 Ocak 2021
androidx.paging:paging-compose:1.0.0-alpha05 iptal edilir. 1.0.0-alpha05 sürümü şu commit'leri içerir.
Compose 1.0.0-alpha10'a bağlı olacak şekilde güncellendi.
Sürüm 1.0.0-alpha04
16 Aralık 2020
androidx.paging:paging-compose:1.0.0-alpha04 iptal edilir. 1.0.0-alpha04 sürümü şu commit'leri içerir.
Hata Düzeltmeleri
- Kolaylık özelliklerini güncelledik.
CombinedLoadStates.refresh,CombinedLoadStates.prepend,CombinedLoadStates.appendUzaktan güncellemenin uygulandığından emin olmak için yalnızca hem aracı hem de kaynak yükleme durumlarıNotLoadingolduktan sonraLoading'danNotLoading'e geçiş yapacak. (I65619)
Sürüm 1.0.0-alpha03
2 Aralık 2020
androidx.paging:paging-compose:1.0.0-alpha03 iptal edilir. 1.0.0-alpha03 sürümü şu commit'leri içerir.
- Compose 1.0.0-alpha08 ile eşleşecek şekilde güncellendi.
Sürüm 1.0.0-alpha02
11 Kasım 2020
androidx.paging:paging-compose:1.0.0-alpha02 iptal edilir. 1.0.0-alpha02 sürümü şu commit'leri içerir.
API Değişiklikleri
.peek(),.snapshot(),.retry()ve.refresh()yöntemleri,AsyncPagingDataDiffer/PagingDataAdapter(Iddfe8, b/172041660) içinde bulunan işlevselliği sunanLazyPagingItem'ye eklendi.
Sürüm 1.0.0-alpha01
28 Ekim 2020
androidx.paging:paging-compose:1.0.0-alpha01 iptal edilir. 1.0.0-alpha01 sürümü şu commit'leri içerir.
Yeni Özellikler
paging-compose yapısı, Paging Library ile Jetpack Compose arasında entegrasyon sağlar. Basit bir kullanım örneği:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Sürüm 3.0.1
Sürüm 3.0.1
21 Temmuz 2021
androidx.paging:paging-*:3.0.1 iptal edilir. 3.0.1 sürümü şu commit'leri içerir.
Hata Düzeltmeleri
LivePagedListveyaRxPagedListtarafından oluşturulan başlangıç değerindenPagedList.dataSource'ya erişildiğinde artık yanlışlıkla IllegalStateException (I96707) istisnası oluşturulmayacak.
Sürüm 3.0.0
Sürüm 3.0.0
5 Mayıs 2021
androidx.paging:paging-*:3.0.0 iptal edilir. 3.0.0 sürümü şu commit'leri içerir.
3.0.0 sürümündeki başlıca özellikler
Paging 2.x.x'teki mevcut API'nin çoğu, aşağıdaki iyileştirmeleri sunmak için yeni Paging 3 API'leri lehine kullanımdan kaldırıldı:
- Kotlin eş yordamları ve Flow için birinci sınıf destek
- İptal ile ilgili destek
- Dahili yükleme durumu ve hata sinyalleri
- Yeniden deneme + yenileme işlevi
- Üç DataSource alt sınıfı, birleştirilmiş bir PagingSource sınıfında birleştirildi.
- Ayraç eklemek için yerleşik bir özellik de dahil olmak üzere özel sayfa dönüşümleri
- Durum üstbilgileri ve altbilgileri yükleniyor
Sürüm 3.0.0-rc01
21 Nisan 2021
androidx.paging:paging-*:3.0.0-rc01 iptal edilir. 3.0.0-rc01 sürümü şu commit'leri içerir.
Hata Düzeltmeleri
- Sayfalama'nın bazen RecyclerView'a no-op farklılık etkinlikleri göndermesine ve bunun da belirli dinleyicilerin erken tetiklenmesine neden olabilen sorun düzeltildi. (Ic507f, b/182510751)
Sürüm 3.0.0-beta03
24 Mart 2021
androidx.paging:paging-*:3.0.0-beta03 iptal edilir. 3.0.0-beta03 sürümü şu commit'leri içerir.
Hata Düzeltmeleri
- Liste yeniden yüklendiğinde yer tutucuların işlenme şeklini, RecyclerView'da beklenmedik atlamaları önleyecek şekilde yeniledik. Ayrıntılar için NullPaddedDiffing.md dosyasına bakın. (If1490, b/170027529, b/177338149)
- Çeşitli PagedList oluşturucular (eski uyumluluk yolu),
.build()çağrıldığında artık ana iş parçacığındaDataSource.Factory.create()'ı yanlışlıkla senkron olarak çağırmıyor. (b/182798948)
Sürüm 3.0.0-beta02
10 Mart 2021
androidx.paging:paging-*:3.0.0-beta02 iptal edilir. 3.0.0-beta02 sürümü şu commit'leri içerir.
API Değişiklikleri
- Rx3 uzantıları artık doğru şekilde yayılıyor
@ExperimentalCoroutinesApiKaydolma şartı. Daha önce@getyöntemiyle işaretleniyorlardı. Bu yöntem, https://youtrack.jetbrains.com/issue/KT-45227 (I5733c) nedeniyle Kotlin derleyicisi tarafından yoksayılıyordu.
Hata Düzeltmeleri
- Deneysel API'lerin herkese açık kullanımına kısıtlamalar getirme (I6aa29, b/174531520)
- Uzak yenileme çağrıldığında
PagingStatedeğerinin her zamannullolmasına neden olan hata düzeltildi. - PagingSource tarafından döndürülen boş sayfaların, Paging'in
prefetchDistance'ı karşılamak için tekrar getirmesini engelleyerek Paging'in "takılmasına" neden olabildiği hata düzeltildi.
Sürüm 3.0.0-beta01
10 Şubat 2021
androidx.paging:paging-*:3.0.0-beta01 iptal edilir. 3.0.0-beta01 sürümü şu commit'leri içerir.
API Değişiklikleri
- Rx2 ve Rx3 sarmalayıcıları artık bağlı oldukları deneysel ek açıklamayı kullanıma sunuyor. paging-rxjava2 veya paging-rxjava3'te Rx uyumluluk sarmalayıcılarını kullanıyorsanız artık kullanımları
@OptIn(ExperimentalCoroutinesApi::class)(Ib1f9d) ile açıklama eklemeniz gerekir.
Hata Düzeltmeleri
- Uyumluluk yolları üzerinden v2
DataSourceAPI'leri kullanılırken bazenIndexOutOfBoundsException: Inconsistency detectedhatası veriliyordu. Bu sorun düzeltildi. - Uyumluluk yolları üzerinden kullanıldığında
DataSourcebaşlatılırken yapılanisInvalidaraması artık ana iş parçacığında değil, fetchDispatcher'da doğru şekilde başlatılıyor. Bu düzeltme, Room'unPagingSourceuygulaması kullanılırken ana iş parçacığında veritabanı erişimi nedeniyle oluşanIllegalStateExceptionsorununu giderir.
Sürüm 3.0.0-alpha13
27 Ocak 2021
androidx.paging:paging-*:3.0.0-alpha13 iptal edilir. 3.0.0-alpha13 sürümü şu commit'leri içerir.
API Değişiklikleri
PagingSource.getRefreshKeyartık isteğe bağlı olarak uygulanmaz. Bu işlev, varsayılan uygulaması olmayan soyut bir işlevdir. Kullanıcıları taşıyanlar, yalnızcanulldeğerini döndüren varsayılan uygulamayı döndürmeye devam edebilir. AncakgetRefreshKey(), mümkünsePagingState.anchorPositionaracılığıyla sayfalama özelliğinin, kullanıcının mevcut kaydırma konumuna göre bir anahtar döndürerek görünüm alanı etrafında ortalanmış şekilde yüklenmeye devam etmesini sağlayan gerçek bir uygulamaya sahip olmalıdır. (I4339a)InvalidatingPagingSourceFactoryartık nihai bir sınıf (Ia3b0a)- İsteğe bağlı ek bir SeparatorType parametresiyle terminal ayırıcı (başlık / altbilgi) davranışının yapılandırılmasına izin verilir. İki seçenek vardır:
FULLY_COMPLETE- Mevcut davranış: Terminal ayırıcıları eklemeden önce hem PagingSource hem de RemoteMediator'ın endOfPaginationReached'ı işaretlemesini bekleyin. RemoteMediator kullanılmıyorsa uzak loadState yoksayılır. Bu özellik, özellikle bölümü tamamen yüklendiğinde (ör. ağ gibi uzak bir kaynaktan getirme dahil) yalnızca bölüm ayırıcıları göstermek istediğinizde kullanışlıdır.SOURCE_COMPLETE- RemoteMediator kullanılsa bile yalnızca PagingSource'un endOfPaginationReached işaretini koymasını bekleyin. Bu sayede üst bilgiler ve alt bilgiler, ilk yükleme ile eşzamanlı olarak sunulur. Böylece kullanıcıların terminal ayırıcıları görmek için kaydırma yapması gerekmez. (Ibe993, b/174700218)
Hata Düzeltmeleri
- PageFetcher, yüklemeyi başlatmaya başlamadan önce bir PagingSource geçersiz kılındığında meydana gelen nadir bir bellek sızıntısı düzeltildi. (I9606b, b/174625633)
Sürüm 3.0.0-alpha12
13 Ocak 2021
androidx.paging:paging-*:3.0.0-alpha12 iptal edilir. 3.0.0-alpha12 sürümü şu commit'leri içerir.
API Değişiklikleri
- InvalidatingPagingSourceFactory, hiçbir zaman soyut yöntemi olmadığı için artık soyut bir sınıf değildir. (I4a8c4)
- Java kullanıcıları için Lifecycle veya CoroutineScope yerine ViewModel'i kabul eden bir .cachedIn() aşırı yüklemesi eklendi. (I97d81, b/175332619)
- Yürütücü'yü dönüştürme operatörü bağımsız değişkenlerine kabul ederek Java arayanların PagingData dönüştürme işlemlerini eşzamansız bir şekilde kullanmasına izin verin. Tüm -Sync dönüştürme operatörlerinin -Sync soneki kaldırıldı. Kotlin Coroutine kullanıcılarının, askıya alma bloğu kabul eden uzantı işlevini çağırarak belirsizliği gidermesi gerekiyor.
Tüm PagingData dönüşüm operatörleri, statik PagingDataTransforms sınıfı altındaki uzantılara taşındı. Java kullanıcılarının bunları statik yardımcılar aracılığıyla çağırması gerekir. Örneğin:
PagingDataTransforms.map(pagingData, transform)Kotlin kullanıcıları için söz dizimi aynıdır ancak işlevi içe aktarmanız gerekir. (If6885, b/172895919)
Hata Düzeltmeleri
- Sayfalama sonuna zaten ulaşılmışsa
adapter.refresh()sırasındaRemoteMediator.load()'nın çağrılmamasına neden olan hata düzeltildi.
Sürüm 3.0.0-alpha11
16 Aralık 2020
androidx.paging:paging-*:3.0.0-alpha11 iptal edilir. 3.0.0-alpha11 sürümü şu commit'leri içerir.
Yeni Özellikler
- Aşağıdaki temel kullanım alanları için kaydedilmiş durum desteği eklendi (özellikle katmanlı kaynak durumunda tam destek için çalışmalar devam etmektedir):
- akış önbelleğe alınır ve uygulama sonlandırılmaz (ör. akış, görünüm modelinde önbelleğe alınır ve etkinlik süreçte yeniden oluşturulur)
- sayfalama kaynağı sayılır, yer tutucular etkinleştirilir ve düzen kademeli değildir.
API Değişiklikleri
PagingSource.getRefreshKey()artık kararlı API (I22f6f, b/173530980)PagingSource.invalidateartık açık bir işlev değil. Geçersiz kılma işlemi gerçekleştiğinde bildirim almak istiyorsanız geçersiz kılma yöntemini geçersiz kılmak yerine registerInvalidatedCallback yöntemini çağırmayı düşünebilirsiniz. (I628d9, b/173029013, b/137971356)- Pager artık deneysel API'leri, dahil etme ek açıklaması aracılığıyla deneysel olmayan herkese açık API'ye sızdırmak yerine normal oluşturucularının yanı sıra tek bir deneysel oluşturucuya sahip. (I9dc61, b/174531520)
- Kolaylık özelliklerini güncelledik.
CombinedLoadStates.refresh,CombinedLoadStates.prepend,CombinedLoadStates.appendUzaktan güncellemenin uygulandığından emin olmak için yalnızca hem aracı hem de kaynak yükleme durumlarıNotLoadingolduktan sonraLoading'danNotLoading'e geçiş yapacak. (I65619) LoadParams.pageSize kaldırıldı (zaten kullanımdan kaldırılmıştı). PagingSource'unuzda
LoadParams.loadSizekullanmanız önerilir.LoadParams.loadSize, ilk yükleme çağrısı hariç her zamanPagingConfig.pageSizedeğerine eşittir. İlk yükleme çağrısında isePagingConfig.initialLoadSizedeğerine eşittir.Sayfalama veya PagedList kullanmadan Paging2 DataSource'unuzu test ediyorsanız
pageSize,initialLoadSizedeğerini de ayarlıyorsanızPagingConfig.pageSizeile eşleşmeyebilir. Testleriniz için önemliyse bunun yerine, DataSource yükleme yöntemleriniz için dahili olarak doğru PageSize'ı ayarlayan bir Pager/PagedList kullanmayı deneyin. (I98ac7, b/149157296)
Hata Düzeltmeleri
- PagingConfig.maxSize ayarlanmışken ayırıcılar kullanıldığında IllegalStateException nedeniyle oluşan kilitlenme düzeltildi. (I0ed33, b/174787528)
- RemoteMediator ayarlandıysa (I8cf5a), PREPEND / APPEND için yükleme durumunun ilk yüklemeden hemen sonra
NotLoading(endOfPaginationReached = true)olarak güncellenmemesine neden olan hata düzeltildi. - .snapshot(), .peek() gibi sunucu tarafı API'lerinin, ListUpdateCallback güncellemelerinde önceki (güncel olmayan) listeyi döndürmesine neden olan hata düzeltildi.
- RemoteMediator ile kullanıldığında Ayırıcı operatörlerinin üstbilgi veya altbilgi eklememesine neden olan hata düzeltildi.
- LoadState'in RemoteMediator için NotLoading olarak güncellenmesinin Loading durumunda takılmasına neden olan hata düzeltildi.
- Paging2.0 uyumluluk API'si
.asPagingSourceFactory()'nin, destekleyenDataSource'nin yanlış CoroutineDispatcher'da başlatılmasına neden olabildiği hata düzeltildi. Bu, özellikle bu uyumluluk yolunu kullanan Room'un PagingSource'un mevcut uygulaması kullanılırken kilitlenmeyi ve olası ANR durumlarını çözer.
Sürüm 3.0.0-alpha10
2 Aralık 2020
androidx.paging:paging-*:3.0.0-alpha10 iptal edilir. 3.0.0-alpha10 sürümü şu commit'leri içerir.
API Değişiklikleri
Desteği sonlandırılan
dataRefreshFlowvedataRefreshListenerAPI'leri, loadStateFlow / Listener güncellemeleriyle gereksiz hale geldikleri için kaldırıldı. Taşıma işlemi yapanlar için loadStateFlow eşdeğeri şudur:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Hata Düzeltmeleri
- endOfPaginationReached for RemoteMediator
REFRESHartık LoadState güncellemelerine doğru şekilde yayılıyor ve uzakAPPENDilePREPENDöğelerinin tetiklenmesini engelliyor. (I94a3f, b/155290248) - Boş başlangıç sayfası veya yoğun filtreleme nedeniyle boş bir liste sunulması artık
PREPENDveyaAPPENDyüklemelerinin başlatılmasını engellemeyecek. (I3e702, b/168169730) - Geçersiz kılma işlemleri hızlı bir şekilde gerçekleştiğinde
getRefreshKeyişlevinin PagingSource'un sonraki oluşturma işlemlerinde çağrılmamasına neden olan sorun düzeltildi. (I45460, b/170027530)
Harici Katkı (External Contribution)
- InvalidatingPagingSourceFactory adlı yeni bir soyut sınıf eklendi. Bu sınıf,
.invalidate()API'siyle invalidate işlevini yayınladığı tüm PagingSource'lara yönlendirir. @claraf3'e teşekkür ederiz. (Ie71fc, b/160716447)
Bilinen Sorunlar
- .insertSeparators() dönüşümünden gelen üst ve alt bilgiler, RemoteMediator b/172254056 kullanılırken hemen görünmeyebilir.
- RemoteMediator'ın kullanılması, geçersiz kılma ve
PagingSource.load(LoadParams.Refresh(...))işlemleriRemoteMediator.load()döndürmeden önce tamamlanırsa uzakLoadStateişleminin takılmasına neden olabilir. b/173717820
Sürüm 3.0.0-alpha09
11 Kasım 2020
androidx.paging:paging-*:3.0.0-alpha09 iptal edilir. 3.0.0-alpha09 sürümü şu commit'leri içerir.
API Değişiklikleri
- replaceWith ifadesiyle dataRefreshFlow / Listener yöntemlerinin desteğini tamamen sonlandırın. (I6e2dd)
Hata Düzeltmeleri
- RemoteMediator ile ayırıcılar kullanılırken ve endOfPagination döndürecek bir uzaktan yükleme hâlâ çalışırken geçersiz kılma işlemi tetiklendiğinde
IllegalArgumentExceptionhatasının oluşması sorunu düzeltildi (I3a260).
Sürüm 3.0.0-alpha08
28 Ekim 2020
androidx.paging:paging-*:3.0.0-alpha08 iptal edilir. 3.0.0-alpha08 sürümü şu commit'leri içerir.
API Değişiklikleri
DataSource.InvalidatedCallbackişlevinin Kotlin / Java varyantları, Kotlin'de işlevsel arayüz aracılığıyla SAM dönüştürmeleri etkinleştirilerek birleştirildi (Kotlin 1.4'te kullanılabilir). Bu düzeltme,.mapveya.mapByPagetarafından dönüştürüldükten sonra geçersiz kılma geri çağırmalarının Kotlin varyantının çağrılmamasına neden olan bir hatayı da düzeltir. (I1f244, b/165313046)
Hata Düzeltmeleri
- Paging'in ViewPager ile etkileşimi önemli ölçüde iyileştirildi. Daha net bir ifadeyle, Paging artık sayfa geçersiz kılma nedeniyle
RemoteMediator#loadçağrısını iptal etmeyecek. Ayrıca, REFRESH isteği başarıyla tamamlanana kadar REFRESH gerekli olduğunda artık ekleme/ön ekleme yükleme isteğinde bulunmaz. (I6390b, b/162252536) - androidx için MissingGetterMatchingBuilder ile ilgili API lint kontrolü etkinleştirildi (I4bbea, b/138602561)
.withLoadState*ConcatAdapteryardımcılarının, RecyclerView'ı arka plan iş parçacığından bildirmesi nedeniyle kilitlenmesine neden olan hata düzeltildi (I18bb5, b/170988309).- Çok küçük ve boş olmayan bir sayfanın yüklenmesinin bazen önceden getirme işleminin yüklemeleri doğru şekilde tetiklemesini engellediği hata düzeltildi.Iffda3 b/169259468
Sürüm 3.0.0-alpha07
1 Ekim 2020
androidx.paging:paging-*:3.0.0-alpha07 iptal edilir. 3.0.0-alpha07 sürümü şu commit'leri içerir.
API Değişiklikleri
- Guava tabanlı Async PagingData operatörleri artık yürütme bağlamını kontrol etmek için parametre olarak Executor kabul ediyor. (Id4372)
Hata Düzeltmeleri
- Yarış koşulu nedeniyle RemoteMediator'da oluşan IndexOutOfBounds istisnası düzeltildi. (I00b7f, b/165821814)
- DataSource -> PagingSource dönüşümünde, sonuçtaki PagingSource'un DataSource'tan gelen geçersiz kılma sinyallerini yoksaymasına neden olabilen bir yarış durumu düzeltildi.
- Sayfa getirme mantığındaki, PagingDataAdapter.refresh() çağrılana kadar bazen PagingSource'un yeni nesillerini almasını engelleyen sorun düzeltildi.
- PagingSource'a dönüştürülmüş bir DataSource (ör. Room tarafından oluşturulan) RemoteMediator ile birlikte kullanılırken kaydırma konumunun bazen kaybolmasına neden olan sorun düzeltildi.
Harici Katkı (External Contribution)
- PagingData için RxJava2, RxJava3 ve Guava tabanlı asenkron dönüşüm operatörlerini ekleyen @simonschiller'a teşekkür ederiz.
Sürüm 3.0.0-alpha06
2 Eylül 2020
androidx.paging:paging-*:3.0.0-alpha06 iptal edilir. 3.0.0-alpha06 sürümü şu commit'leri içerir.
API Değişiklikleri
UnsupportedOperationExceptionile ilgili daha net mesajlar Kararlı kimlikler için destek eksikliği artık her zamanPagingDataAdapter.setHasStableIdsçağrıldığında gösteriliyor. (Ib3890, b/158801427)
Hata Düzeltmeleri
- insertSeparators artık boş sayfaları filtrelemiyor. Bu sayede, birçok boş sayfanın eklendiği durumlarda bile sunum yapan kişi tarafından önceden getirme mesafesine uyulabiliyor. (I9cff6, b/162538908)
Sürüm 3.0.0-alpha05
19 Ağustos 2020
androidx.paging:paging-*:3.0.0-alpha05 iptal edilir. 3.0.0-alpha05 sürümü şu commit'leri içerir.
Hata Düzeltmeleri
- Sayfalama özelliği, sunulan veriler yoğun şekilde filtrelenmiş olsa bile sayfaları artık doğru şekilde önceden getiriyor.
LoadResult.Error'ı yeniden yüklenen bir öğeye döndürmek artık öğe erişimlerinin yeniden denemeyi yanlış şekilde tetiklemesine neden olmuyor.
Harici Katkı (External Contribution)
- Bazı testleri temizlememize yardımcı olan Clara F'ye teşekkür ederiz. (549612)
Sürüm 3.0.0-alpha04
5 Ağustos 2020
androidx.paging:paging-*:3.0.0-alpha04 iptal edilir. 3.0.0-alpha04 sürümü şu commit'leri içerir.
API Değişiklikleri
peek()API'siAsyncPagingDataDiffervePagingDataAdapter'ye eklenerek tetikleyici sayfa yüklemeleri olmadan sunulan verilere erişime izin verildi. (I38898, b/159104197)- Gösterilen öğelerin sayfa getirme işlemi tetiklenmeden alınmasına olanak tanımak için
PagingDataAdapterveAsyncPagingDataDiffer'yesnapshot()API'si eklendi. (I566b6, b/159104197) - Statik listelerin sunulmasına olanak tanıyan bir
PagingData.from(List<T>)oluşturucu eklendi.Bu oluşturucu, belirli durumlarda (ör. ilk YENİLEME işlemi tamamlanmadan önce) statik listeleri göstermek için genel PagingData akışıyla birleştirilebilir veya yalnızca dönüşümleri test etmek için kullanılabilir. (Id134d) - dataRefresh Flow / Listener API'leri, REFRESH'te sunulan öğelerin durumunu göstermek için tasarlanmış olsalar da loadState Flow / Listener geri çağırma zamanlaması ve itemCount özelliği ile ilgili iyileştirmeler yapıldığından gereksiz hale geldi (Ia19f3).
PagingSourceveRemoteMediatoriçin RxJava3 uyumluluk sarmalayıcıları eklendi (I49ef3, b/161480176)
Hata Düzeltmeleri
PositionalDataSourcedönüştürülenPagingSource,toPagingSourceFactoryyardımcı programı aracılığıyla,PagingSourcedahil olmak üzere, artık atlamayı desteklemek için doğru şekilde işaretleniyor. (I3e84c, b/162161201)- submitData'nın senkron varyantının kullanılması bazen yarışa yol açarak
ClosedSendChannelException'ya (I4d702, b/160192222) neden oluyordu. Bu hata düzeltildi.
Harici Katkı (External Contribution)
- Slack adına RxJava3 uyumluluk sarmalayıcıları eklediği için Zac Sweers'e teşekkür ederiz. (I49ef3, b/161480176)
Sürüm 3.0.0-alpha03
22 Temmuz 2020
androidx.paging:paging-*:3.0.0-alpha03 iptal edilir. 3.0.0-alpha03 sürümü şu commit'leri içerir.
API Değişiklikleri
- PagingState için oluşturucu artık herkese açık. Bu sayede getRefreshKey() uygulamalarının test edilmesi kolaylaşacak (I8bf15).
- Orijinal ve Kotlin varyantları arasındaki belirsizliği gidermek için DataSource Kotlin harita işlevi varyantlarını Java'dan gizleyin. (If7b23, b/161150011)
- Kotlin kullanıcılarına kolaylık sağlamak için tasarlanan gereksiz API'ler @JvmSynthetic olarak işaretlendi (I56ae5).
- LoadResult.Page'in oluşturucusu için aşırı yüklemeler eklendi. Bu aşırı yüklemelerde itemsBefore ve itemsAfter, varsayılan olarak COUNT_UNDEFINED'a (I47849) ayarlanır.
- Mevcut PagingData operatörlerinin askıya alma yöntemlerini kabul etmesini sağlandı ve Java kullanıcıları için yeni mapSync, flatMapSync ve filterSync askıya alma dışı operatörleri kullanıma sunuldu. Mevcut dönüştürme yöntemleri uzantı işlevlerine taşındı. Bu nedenle, Kotlin kullanıcılarının artık bunları içe aktarması gerekiyor. (I34239, b/159983232)
Hata Düzeltmeleri
- Room (ve PositionalDataSource) PagingSource'lar artık ilk sayfanın bir parçası olarak önde gelen bir ayırıcı gösterecek. Böylece kullanıcının ayırıcıyı görmek için kaydırması gerekmeyecek. (I6f747, b/160257628)
- Yer tutuculardaki öğe erişimleri artık, PagingData.filter() tarafından dönüştürüldükten sonra istenen dizini karşılayan bir sayfa döndürülene kadar PagingSource yüklemelerini doğru şekilde tetikliyor (I95625, b/158763195).
- PagingSource, bazen PagingDataAdapter.retry()'nin yeniden denemesini engelleyen bir hatayı düzeltmek için hata döndürdükten sonra kaydırma yapıldığında. (I1084f, b/160194384)
- Bir sayfa bırakıldıktan sonra öğe erişiminin, önceden getirme mesafesi içinde olmasına rağmen sayfaların yüklenmemesine neden olan sorun düzeltildi (Ie95ae, b/160038730).
- PagingConfig.maxSize ayarlandığında artık bırakma etkinliğinden sonra yer tutucular etkinleştirilmiyor (I2be29, b/159667766)
Sürüm 3.0.0-alpha02
24 Haziran 2020
androidx.paging:paging-*:3.0.0-alpha02 iptal edilir. 3.0.0-alpha02 sürümü şu commit'leri içerir.
API Değişiklikleri
PagingConfigoluşturucusuna, yaygın varsayılan değerlerle (I39c50, b/158576040) aşırı yüklemeler eklendi.- Ortak varsayılan değerlere (Ie91f5) sahip
PagingDataAdapterveAsyncPagingDataDifferoluşturucuları için aşırı yüklemeler eklendi. dataRefreshFlowvedataRefreshListenerbağdaştırıcı API'leri artıkPagingDataöğesinin boş olup olmadığını belirtmek için bir Boole değeri iletiyor (I6e37e, b/159054196).- RemoteMediator için RxJava ve Guava API'leri eklendi: RxRemoteMediator ve ListenableFutureRemoteMediator
isEmpty()vefirstItemOrNull()gibi yaygın öğe erişimi için PagingState'e yardımcılar eklendi (I3b5b6, b/158892717)
Hata Düzeltmeleri
- Pager, artık geçersiz PagingSource'ların yanlışlıkla yeniden kullanılmasını önlemek için fabrikada PagingSource'un yeniden kullanılıp kullanılmadığını kontrol ediyor. Bu durum, net olmayan bir hataya (I99809, b/158486430) neden oluyordu.
- RemoteMediator REFRESH'ten kaynaklanan hatalar artık PagingSource'un yüklenmesini engellemiyor (I38b1b, b/158892717)
submitData'nın askıya alma işlemi yapmayan sürümü,submitData'nın askıya alma işlemi yapan sürümünden sonra çağrıldığında birden fazlaPagingDataüzerinde eşzamanlı toplama nedeniyle artık kilitlenmeye neden olmuyor. (I26358, b/158048877)- Yapılandırma değişikliğinden sonra oluşabilecek "pager'dan iki kez toplanamıyor" istisnası düzeltildi (I58bcc, b/158784811).
Sürüm 3.0.0-alpha01
10 Haziran 2020
androidx.paging:paging-*:3.0.0-alpha01 iptal edilir. 3.0.0-alpha01 sürümü şu commit'leri içerir.
Paging Library, çeşitli önemli yeni özellikleri etkinleştirmek için 3.0 sürümüne güncellendi.
3.0 sürümündeki yeni özellikler
- Kotlin eşyordamları ve Flow için birinci sınıf destek.
- Coroutine askıya alma işlevleri, RxJava Single veya Guava ListenableFuture temel öğeleri ile eşzamansız yükleme desteği.
- Yeniden deneme ve yenileme işlevleri de dahil olmak üzere duyarlı kullanıcı arayüzü tasarımı için yerleşik yükleme durumu ve hata sinyalleri.
- Depo katmanında yapılan iyileştirmeler
- Basitleştirilmiş veri kaynağı arayüzü
- Basitleştirilmiş ağ ve veritabanı sayfalama
- İptal desteği
- Sunum katmanında yapılan iyileştirmeler
Bilinen Sorunlar
- Paging 3 javadocs henüz kullanıma sunulmamıştır. Bu süre zarfında lütfen yukarıda bağlantısı verilen rehberleri veya Kotlin dokümanlarını kullanın. (b/158614050)
Sürüm 2.1.2
Sürüm 2.1.2
18 Mart 2020
androidx.paging:paging:2.1.2 iptal edilir. 2.1.2 sürümü, 2.1.0 sürümüne karşı bu onaylamaları içerir.
Hata Düzeltmeleri
- Geçersiz kılma sırasında konum dönüştürülürken nadir durumlarda
IndexOutOfBoundsExceptionile ilgili düzeltme.
Yayın sorunu
Sayfalama sürümü
2.1.1, yanlış yapılandırılmış bir daldan hatalı şekilde yayınlandı. Bu durum, gelecekteki bir sürümde kullanıma sunulacak olan kısmen uygulanmış API'lerin ve işlevlerin açığa çıkmasına neden oldu.Sayfalama
2.1.2, başlangıçta 2.1.1 sürümünde yayınlanan yükü merkezleme düzeltmesini içerir ancak bu kez 2.1.0 sürümünde doğru şekilde seçilmiştir. Şu anda 2.1.1 sürümünü kullanıyorsanız bu sürüme yükseltmeniz önemle tavsiye edilir.
Sürüm 2.1.1
Sürüm 2.1.1
18 Aralık 2019
androidx.paging:paging-*:2.1.1 iptal edilir. 2.1.1 sürümü şu commit'leri içerir.
Hata düzeltmeleri
- Yer tutucular devre dışı bırakıldığında, PositionalDataSources'tan yapılan bitişik ilk yüklemeler artık son erişim etrafında ortalanıyor.
Sürüm 2.1.0
Sürüm 2.1.0
25 Ocak 2019
Sayfalama 2.1.0, 2.1.0-rc01'den herhangi bir değişiklik yapılmadan yayınlandı.
Sürüm 2.1.0-rc01
6 Aralık 2018
Sayfalama 2.1.0-rc01, 2.1.0-beta01'den herhangi bir değişiklik yapılmadan yayınlandı.
Sürüm 2.1.0-beta01
1 Kasım 2018
Sayfalama 2.1.0-beta01, 2.1.0-alpha01'den herhangi bir değişiklik yapılmadan yayınlandı.
Sürüm 2.1.0-alpha01
12 Ekim 2018
Sayfalama 2.1.0-alpha01, her yapıt için KTX uzantı kitaplıklarının yanı sıra sayfa bırakma gibi iki önemli ekleme ve çeşitli API değişiklikleri ile hata düzeltmeleri içerir.
API Değişiklikleri
- Belleğe yüklenen öğe sayısını sınırlamak için
PagedList.Config.Builder.setMaxSize()eklendi. androidx.paging.Config(),PagedList.Config.Builderiçin Kotlin alternatifi olarak eklendiandroidx.paging.PagedList(),PagedList.Builderiçin Kotlin alternatifi olarak eklendiDataSourceFactory.toLiveData(),LivePagedListBuilderiçin Kotlin alternatifi olarak eklendiRxPagedListBuilderiçin Kotlin alternatifleri olarakDataSourceFactory.toObservable()vetoFlowable()eklendi- PagedList değiştirildiğinde dinlemek için
AsyncPagedListDiffer.addPagedListListener()eklendi. b/111698609 - Eski ve yeni listeyi geçen
PagedListAdapter.onCurrentListChanged()varyantı eklendi, önceki varyant kullanımdan kaldırıldı. - Sayfalandırılmış liste farklılaştırıldıktan sonra görüntülendiğinde tetiklenen ek bir geri çağırma işlevi alan
PagedListAdapter/AsyncPagedListDiffer.submitList()varyantları eklendi. Bu sayede, PagedList değişimini diğer kullanıcı arayüzü güncellemeleriyle senkronize edebilirsiniz. b/73781068 - Bellekte kaç öğe olduğunu size bildirmek için
PagedList.getLoadedCount()simgesi eklendi. Yer tutucular devre dışı bırakılırsa dönüş değerinin her zaman.size()'ya eşit olacağını unutmayın.
Hata Düzeltmeleri
- Listeler yeniden kullanılıyorsa karşılaştırma yapılırken oluşan yarış durumu düzeltildi. b/111591017
PagedList.loadAround()artık dizin geçersiz olduğundaIndexOutOfBoundsExceptionhatası veriyor. Daha önce, net olmayan başka bir istisna nedeniyle kilitlenebiliyordu.- Çok küçük bir ilk yükleme boyutuyla birlikte değişmeyen verilerin daha fazla yüklenmemesine neden olan sorun düzeltildi. b/113122599
Sürüm 2.0.0
Sürüm 2.0.0
1 Ekim 2018
Tek bir hata düzeltmesiyle 2.0.0 sayfalama özelliği yayınlandı.
Hata Düzeltmeleri
PositionalDataSourceve yer tutucular kullanılarak çok hızlı kaydırma yapıldığında meydana gelebilecek kilitlenme sorunu düzeltildi b/114635383.
Sürüm 2.0.0-beta01
2 Temmuz 2018
Hata Düzeltmeleri
- Bazı önek ekleme işlemlerinde (yer tutucular devre dışı, PositionalDataSource) içeriğin kaybolması sorunu düzeltildi. b/80149146
- (
1.0.1sürümünde yayınlandı)PagedListAdapterveAsyncPagedListDiffer'nin taşıma etkinliklerini bildirememesine neden olan kilitlenmeler düzeltildi. b/110711937
AndroidX Öncesi Bağımlılıklar
Aşağıdaki Paging'in AndroidX öncesi sürümleri için şu bağımlılıkları ekleyin:
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"
}
Sürüm 1.0.1
Sürüm 1.0.1
26 Haziran 2018
Paging 1.0.1, runtime sürümünde tek bir hata düzeltmesiyle yayınlandı. Kararlılık için 1.0.1 kullanmanızı önemle tavsiye ederiz. Paging RxJava2 1.0.1 de yayınlandı ve 1.0.0-rc1 ile aynı.
Hata Düzeltmeleri
PagedListAdapterveAsyncPagedListDiffersimgelerinin taşıma etkinliklerini bildirememesine neden olan kilitlenme sorunları düzeltildi. b/110711937
RxJava2 Sürüm 1.0.0
RxJava2 Version 1.0.0-rc1
16 Mayıs 2018
Paging RxJava2 1.0.0-rc1, ilk alfa sürümünden herhangi bir değişiklik yapılmadan sürüm adayına taşınıyor.
Sürüm 1.0.0
Sürüm 1.0.0-rc1
19 Nisan 2018 Sayfalama Sürüm Adayı
Paging 1.0.0 sürümü için bilinen başka sorun veya planlanmış yeni özellik yok. Lütfen projelerinizi 1.0.0-rc1 kullanacak şekilde yükseltin ve sağlam bir 1.0.0 yayınlayabilmemiz için bu özelliği test etmemize yardımcı olun.
Bu sürümde değişiklik yapılmadı. 1.0.0-beta1 sürümüyle aynıdır.
Sürüm 1.0.0-beta1
5 Nisan 2018
Sayfalama, yayın adayı sürümüne geçmeden önce kısa bir süre beta sürümünde kalacak.
Paging 1.0 için başka API değişikliği planlamıyoruz ve API değişiklikleri için çok katı şartlar uyguluyoruz.
Paging için alfa RxJava2 desteği ayrı bir isteğe bağlı modül (android.arch.paging:rxjava2:1.0.0-alpha1) olarak yayınlanır ve kararlı hale gelene kadar geçici olarak ayrı şekilde sürüm oluşturulur.
Bu yeni kitaplık, LivePagedListBuilder için RxJava2 alternatifi sunar. Observable ve Flowable oluşturabilir, Executor yerine Scheduler alır:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Yeni Özellikler
RxPagedListBuilder, yeniandroid.arch.paging:rxjava2yapısı aracılığıyla eklenir.
API Değişiklikleri
Oluşturucularda yürütücülerin rolünü netleştirmek için API değişiklikleri:
setBackgroundThreadExecutor(),setFetchExecutor()olarak yeniden adlandırıldı (PagedList.BuilderveLivePagedListBuilderiçinde)setMainThreadExecutor(),setNotifyExecutor()olarak yeniden adlandırıldı (PagedList.Builderiçinde).
PagedList.mCallbacksüyesinin gizli olması sorunu düzeltildi.
Hata Düzeltmeleri
LivePagedListBuilder, Arch Components IO iş parçacığı havuzu yerine belirtilen yürütücüde ilkPagedListyüklemeyi tetikler.Dahili
DataSourcesarmalayıcılarındaki geçersiz kılma davranışı düzeltildi (DataSource.mapve yer tutucu devre dışı bırakılmışPositionalDataSourceyükleme işlemlerini uygulamak için kullanılır) b/77237534
Sürüm 1.0.0-alpha7
21 Mart 2018
Sayfalama 1.0.0-alpha7, Yaşam Döngüleri 1.1.1 ile birlikte kullanıma sunulur. Paging alpha7, yukarıda belirtilen Function sınıfının taşınmasına bağlı olduğundan lifecycle:runtime bağımlılığınızı android.arch.lifecycle:runtime:1.1.1 olarak güncellemeniz gerekir.
Sayfalama alpha7, Sayfalama beta sürümüne ulaşmadan önceki son sürüm olarak planlanmıştır.
API Değişiklikleri
DataSource.LoadParamsnesneleri artık herkese açık bir oluşturucuya sahip veDataSource.LoadCallbacknesneleri artık soyut. Bu,DataSourcesarmalamayı veya sahte bir geri çağırma ile doğrudanDataSourcetest etmeyi sağlar. b/72600421- DataSource ve DataSource.Factory için eşleyiciler
map(Function<IN,OUT>),DataSourcetarafından yüklenen sonuçları dönüştürmenize, sarmalamanıza veya süslemenize olanak tanır.mapByPage(<List<IN>,List<OUT>>), toplu işleme için de aynı işlemi etkinleştirir (ör. SQL'den yüklenen öğelerin ek olarak ayrı bir veritabanına sorgu göndermesi gerekiyorsa bu işlem toplu olarak yapılabilir).
PagedList#getDataSource(), kolaylık yöntemi olarak eklendi b/72611341recyclerview.extensionspaketinin kalıntıları veLivePagedListProviderdahil olmak üzere, desteği sonlandırılan tüm sınıflar API'den kaldırıldı.DataSource.Factory, harita işlevinin etkinleştirilmesi için arayüzden soyut sınıfa değiştirildi.
Hata Düzeltmeleri
- Oluşturucular nihai olacak şekilde değiştirildi. b/70848565
- Room
DataSourceuygulaması artık çok tablolu sorguları işleyecek şekilde düzeltildi. Bu düzeltme Room 1.1.0-beta1'de yer alıyor. Yukarıdaki bilgilere göz atın. - Yer tutucular etkinleştirilmişse ve toplam boyut, sayfa boyutunun tam katıysa
BoundaryCallback.onItemAtEndLoadediçinPositionalDataSource'nin çağrılmamasına neden olan hata düzeltildi.
Sürüm 1.0.0-alpha5
22 Ocak 2018
Hata Düzeltmeleri
- Yer tutucular devre dışı bırakıldığında sayfa yükleme sorununu düzeltme b/70573345
- IllegalArgumentException hatası b/70360195'i izlemek için ek günlük kaydı (ve spekülatif Room tarafı düzeltmesi)
- Javadoc örnek kod düzeltmeleri b/70411933, b/71467637