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-alpha01 |
paging-compose | 3.3.6 | - | - | 3.4.0-alpha01 |
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-alpha01" }
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-alpha01") }
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 olursa 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-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ümlerden çekilen Android birim testleri artık
PagingLogger
'dan (Ia9400, b/331684448) hata vermeyecek. - Kullanıcı
RecyclerView
güncellenirken kaydırdığındaRecyclerView
öğesininIndexOutOfBoundsException
oluş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ı
RecyclerView
güncellenirken kaydırdığındaRecyclerView
öğesininIndexOutOfBoundsException
hatası 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 mocked
gibi 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-common
vepaging-testing
,watchos
,tvos
velinuxArm64
olmak ü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
AsyncPagingDataDiffer
veyaRecyclerView
ile kullanılanPagingDataAdapter
gibi ü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)PagingDataAdapter
veyaAsyncPagingDataDiffer
kullanılarakRecyclerView
kaydırılırken öğeler destekleyen veri kaynağından kaldırıldığında meydana gelen kilitlenme sorunu düzeltildi. (I8c65a, b/347649763)
3.3.0 sürümü
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
PagingDataPresenter
artı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.LoadStates
veCombinedLoadStates
adlı yeni yardımcı yöntemlerhasError
veisIdle
'ye eklendi. Bu yöntemler, sırasıylaLoadStates
'nın hata veyaNotLoading
durumunda olup olmadığını kontrol eder. Ayrıca, yükleme işlemiNotLoading
veya hata durumuna yerleşene kadar bekleyenawaitNotLoading()
Kotlin uzantısı yöntemi de eklendi.Flow<CombinedLoadStates>
PagingData.empty()
, oluşturucusuna özelLoadStates
geçirilmediği sürece artık varsayılan olarakNotLoading
durumlarını gönderir. Bu,PagingDataAdapter
öğesine gönderildiğindeLoadStates
öğesinin gönderilmediği veyaLazyPagingItems
olarak toplandığında yükleme durumlarının gönderildiği mevcut davranıştan farklıdır.LazyPagingItems
olarak 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-rxjava2
vepaging-rxjava3
yalnı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
@MainThread
ek 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ünde şu commit'ler yer alıyor.
Yeni Özellikler
PagingDataPresenter
artı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 Error (Hata) veyaNotLoading
durumunda olup olmadığını kontrol etmek için yeniLoadStates
veCombinedLoadStates
yardımcı yöntemleri eklendi. Ayrıca, yükNotLoading
veya hata durumuna yerleşene kadarLoadStateFlow
üzerinde bekleyen yeni bir API eklendi. (Id6c67)
Davranış değişikliği
PagingData.empty()
, oluşturucusuna özelLoadStates
geçirilmediği sürece artık varsayılan olarakNotLoading
durumlarını gönderir. Bu,PagingDataAdapter
öğesine gönderildiğindeLoadStates
öğesinin gönderilmediği veyaLazyPagingItems
olarak toplandığında yükleme durumlarının gönderildiği mevcut davranıştan farklıdır.LazyPagingItems
olarak 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ünde şu commit'ler yer alıyor.
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ılaşmayı ö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-rxjava2
vepaging-rxjava3
yalnı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
*-jvm
ve*-android
yapıtları var. macOS, iOS ve Linux varyantları için3.3.0-alpha02
kullanı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ığıyla ilgili herhangi bir 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
,LoadStates
sağlayanPagingData.from
aşı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.Main
kullanı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
öğesiniMutableStateFlow
iç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@Preview
composable'larına iletin.LazyVerticalGrid
veHorizontalPager
gibi 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
,itemKey
veitemContentType
gibi yeni alt düzey uzantı yöntemleriyle elde edildi. Bu yöntemler,key
vecontentType
parametreleriniLazyColumn
,LazyVerticalGrid
için mevcut olan standartitems
API'lerine veHorizontalPager
gibi 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-testing
yapısı. Örneğin, şunları içerir:- Kendi özel
PagingSource
uygulamanızın davranışını Pager'dan ve gerçek kullanıcı arayüzünden bağımsız olarak doğrulamanıza olanak tanıyanTestPager
sınıfı. -
asPagingSourceFactory
Flow<List<Value>>
veya statikList<Value>
öğesini testlerde Pager'a iletilebilecek birPagingSourceFactory
öğesine dönüştürmek için API'ler asSnapshot
Kotlin uzantısı,Flow<PagingData<Value>>
dilini doğrudanList<Value>
diline çevirir.Flow<PagingData<Value>>
asSnapshot lambda
,scrollTo
veyaappendScrollWhile
gibi 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 (
VERBOSE
veDEBUG
) 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. CoroutineDispatcher
yerineCoroutineContext
kabul edenPagingDataAdapter
veAsyncPagingDataDiffer
için oluşturucular eklendi.- Önceki () ->
PagingSource
lambda'lara kıyasla daha açık bir API yüzeyi sağlayan yeni birPagingSourceFactory
iş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-alpha20
olarak güncellendi ve artık diğer tüm Paging 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ı. Bu API'lerin yerine kullanılacak API'lere ilişkin örnek için Paging Compose1.0.0-alpha20
sü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
() -> PagingSource
lambda'lardan daha açık bir API yüzeyi sağlayan yeni birPagingSourceFactory
işlevsel arayüz eklendi. Bu fabrika,Pager
oluşturmak için kullanılabilir. (I33165, b/280655188) - Yalnızca değişmez bir veri listesinden yüklenen bir
PagingSourceFactory
almak için yenipaging-testing
API'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
@VisibleForTesting
ile açıklama eklenmiş durumda. Böylece bu API'lerin yalnızca testlerde kullanılması sağlanıyor. (I7db6e) asSnapshot
API artıkCoroutineScope
iletmenizi gerektirmiyor. Artık varsayılan olarak üst kapsamdan devralınan bağlamı kullanır. (Id0a78, b/282240990)TestPager
oluşturucu parametreleri, gerçekPager
oluş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
Sayfalama 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
asSnapshot
Paging Testing API'si artıkloadOperations
parametresini 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.Page
Oluşturucuyla ilgili dokümanlar, atlamayı desteklemek içinitemsBefore
veitemsAfter
değ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-testing
yapısı artık bir Pager'a sağlanacakFlow<List<Value>>
öğesindenpagingSourceFactory
oluşturmak içinasPagingSourceFactory
yöntemini içeriyor. Akıştan yayılan herList<Value>>
, Sayfalandırılmış verilerin oluşturulmasını temsil eder. Bu, örneğin,PagingData
dö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-testing
yapısı,Flow<PagingData<T>>
içinde yer alan verilerin doğruluğunu kontrol etmeye 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,
asSnapshot
Kotlin uzantısı kullanılarak yapılır. Bu uzantı,Flow<PagingData<Value>>
öğesini doğrudanList<Value>
öğesine çevirir.Flow<PagingData<Value>>
asSnapshot
lambda'sı,scrollTo
veyaappendScrollWhile
gibi 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 values
asSnapshot
,runTest
içinde çalıştırılması beklenen birsuspend
yö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
AsyncPagingDataDiffer
vePagingDataAdapter
'dekigetItem
vepeek
kullanı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)TestPager
tarafı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
, PagingSource
test etmek için basitleştirilmiş bir API yüzeyi sağlarken Pager
'ın gerçek uygulamasını yansıtan bir test çifti olan bir sahte 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.data
ileLoadResult.Page.iterator()
arasında kolay yineleme yapılmasını sağlar. Bu,PagingSource.getRefreshKey
yöntemine iletilenPagingState
öğesininpages
özelliği gibi birList<LoadResult.Page>
verildiğinde Kotlin standart kitaplığıflatten
yö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ünde bu commit'ler yer alıyor.
Yeni Özellikler
- Sayfalama artık
AsyncPagingDataDiffer
veyaPagingDataAdapter
sınıfları aracılığıyla günlükler sağlayarakPagingData
'dan toplanan hata ayıklama bilgilerini gösterir. - Günlükler,
adb shell
komutuyla etkinleştirilebiliradb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159)
Hata Düzeltmeleri
paging-common:3.2.0-alpha01
,paging-runtime:3.1.1
veya daha eski bir çalışma zamanı ile kullanılırken eksikPagingDataDiffer
oluş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
CoroutineDispatcher
yerineCoroutineContext
kabul edenPagingDataAdapter
veAsyncPagingDataDiffer
için oluşturucular eklendi. (Idc878)- Varsayılan olarak,
PagingData.from()
vePagingData.empty()
artık sunucu tarafındaCombinedLoadStates
'ı etkilemez.sourceLoadStates
veremoteLoadStates
değerlerinin bu oluşturuculara iletilmesine olanak tanıyan yeni bir aşırı yükleme,LoadStates
değ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.LoadStates
geçirilmezse statikPagingData
alındığında sunum yapan tarafında öncekiCombinedLoadStates
korunur. (Ic3ce5, b/205344028)
Hata Düzeltmeleri
- Boş değer döndüreceği ancak boş olmayan bir
initialKey
değerinin ayarlandığı durumlardaPagingSource.getRefreshKey()
işlevinin sonucu artıkinitialKey
iş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.NotLoading
etkinlikleri 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.NotLoading
etkinlikleri kaldırarakLoadState
değ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>.observable
veFlow<PagingData>.flowable
API'leri artık deneysel değildir.LoadState
ile ilgili davranış değişiklikleri:endOfPaginationReached
, artık hemPagingSource
hem deRemoteMediator
içinLoadType.REFRESH
'de her zamanfalse
- Sayfalandırma'daki
LoadStates
artık aşağı akışa yayınlanmadan önce hemPagingSource
hem deRemoteMediator
'den geçerli değerler bekliyor. Yeni nesilPagingData
, artık yenileme durumu için her zaman doğru şekildeLoading
ile başlayacak ve bazı durumlarda yanlışlıklaNotLoading
olarak sıfırlanmayacak. - Sunucu API'lerindeki
.loadStateFlow
ve.addLoadStateListener
artık her zaman aracı durumlarınınnull
olarak ayarlandığı gereksiz bir ilkCombinedLoadStates
göndermiyor.
- Geçmiş nesillerde iptal işlemi artık geçersiz kılma / yeni nesillerde hemen gerçekleşiyor.
Flow<PagingData>
üzerinde.collectLatest
kullanmak 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 buPagingSource
'ye yönelik 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
.onPagesPresented
ve.addOnPagesUpdatedListener
sunucu 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 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 dikkate alınmaması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>.observable
veFlow<PagingData>.flowable
API'leri artık deneysel değildir. (Ie0bdd)
Hata Düzeltmeleri
- LoadStates için
endOfPaginationReached
artıkLoadType.REFRESH
için her zamanfalse
olur. Daha önce, RemoteMediatorREFRESH
için endOfPaginationReached'ıntrue
olması mümkündü ancak PagingSource için bu mümkün değildi. Bu davranış artık her zamanfalse
dö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, daha önce Loading durumundayken geçerliydi. PagingData'nın yeni nesilleri artık yenileme durumu için her zaman Loading ile doğru şekilde başlayacak ve bazı durumlarda önce 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
.loadStateFlow
ve.addLoadStateListener
artık her zaman aracı durumlarınull
ve kaynak durumlarıNotLoading(endOfPaginationReached = false)
olarak ayarlanmış bir ilkCombinedLoadStates
'yi 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,PagingData
kaynağından gerçek birCombinedLoadStates
almadıysa artık mevcut değeri hemen yayınlamaz. Bu durum, bir toplayıcı veya dinleyici,PagingData
gönderilmeden önce başlatılırsa ortaya çıkabilir. (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'leriyle 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 yer alıyor.
Yeni Özellikler
Gösterilen 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 güncellemeler olmadan ilk yüklemeyi 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-rxjava3
tarafından sağlanan sınıflar artıkandroidx.paging.rxjava3
paketi altında yer alıyor. Böylecepaging-rxjava2
(Ifa7f6) ile çakışmıyor.
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)
- rxjava3 yapay ürününe kullanımdan kaldırılan PagedList uyumluluk API'leri 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
öğesiniMutableStateFlow
içine sarmalayarak sahte verilerin listesini önizlemeyi destekliyor (ör.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Bu verileri@Preview
girişiniz olarak kullanarakcollectAsLazyPagingItems()
çağrıları, önizlenebilirLazyPagingItems
sağlar. (I8a78d, b/194544557)
Hata Düzeltmeleri
pager.flow.cachedIn
'danLazyPagingItems
iç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üklenen düzenleri 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'lerine 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
üzerindekiitems
veitemsIndexed
uzantı işlevleri artık yeni API'lerdeki desteği yansıtan bircontentType
parametresini 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
CoroutineContext
aranırken özelcollectLazyPagingItems
desteğ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
LazyPagingItems
sınıfı aracılığıyla günlükler sağlayarak PagingData'dan toplanan hata ayıklama bilgilerini gösterir. - Günlükler,
adb shell
komutuadb 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.1
veya daha eski bir sürümle kullanılırkenPagingDataDiffer
oluş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. Version 1.0.0-alpha15 contains these commits.
API Değişiklikleri
CoroutineDispatcher
yerineCoroutineContext
kabul edenPagingDataAdapter
veAsyncPagingDataDiffer
için oluşturucular eklendi. (Idc878)
Hata Düzeltmeleri
LazyPagingItems
artık ilkloadState
değeriniLoadState.Loading
yenileme 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. 1.0.0-alpha12 sürümü şu commit'leri içerir.
API Değişiklikleri
items(lazyPagingItems)
veitemsIndexed(lazyPagingItems)
,LazyColumn/Row
ile sayfalama bağlantısı oluşturmak için kullanılır. Bu işlevler artık öğeyi temsil eden sabit bir anahtar belirtmenize olanak tanıyan option key parametresini kabul etmektedir. 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 özellikleri artık gözlemlenebilir. Bu sayede LazyVerticalGrid ile de kullanılabilir (Ie2446, b/171872064, b/168285687).
Oluşturma Uyumluluğu
androidx.paging:paging-compose:1.0.0-alpha09
yalnızca1.0.0-beta07
ve 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 contains these commits.
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üncelleyerek,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
hem aracı hem de kaynak yükleme durumlarıNotLoading
olduktan sonra yalnızcaLoading
'danNotLoading
'ye geçiş yapacak şekilde değiştirdik. Bu sayede, uzaktan güncellemenin uygulandığından emin olabilirsiniz. (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
LivePagedList
veyaRxPagedList
tarafından üretilen 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ış bir şekilde 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
@ExperimentalCoroutinesApi
Kaydolma şartı. Daha önce@get
yö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
PagingState
değerinin her zamannull
olması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 deneysel notu kullanıyor. 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
IndexOutOfBoundsException: Inconsistency detected
API'leri kullanılırken bazenDataSource
hatası veriliyordu. Bu sorun düzeltildi. - Uyumluluk yolları üzerinden kullanıldığında
DataSource
başlatılırken yapılanisInvalid
araması artık ana iş parçacığı yerine fetchDispatcher'da doğru şekilde başlatılıyor. Bu düzeltme, Room'unPagingSource
uygulaması kullanılırken ana iş parçacığında veritabanı erişiminden kaynaklananIllegalStateException
sorununu 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ünde şu commit'ler yer alıyor.
API Değişiklikleri
PagingSource.getRefreshKey
artık isteğe bağlı olarak uygulanmaz. Bu işlev, varsayılan uygulaması olmayan soyut bir işlevdir. Kullanıcıları taşıyanlar, yalnızcanull
değerini döndüren varsayılan uygulamayı döndürmeye devam edebilir. AncakgetRefreshKey()
, mümkünsePagingState.anchorPosition
aracı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)InvalidatingPagingSourceFactory
artık nihai 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 verin. İ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üklediğinizde (ö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üklemeye 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ünde şu commit'ler yer alıyor.
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()
işlevinin ç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.invalidate
artı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ılmayı 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üncelleyerek,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
hem aracı hem de kaynak yükleme durumlarıNotLoading
olduktan sonra yalnızcaLoading
'danNotLoading
'ye geçiş yapacak şekilde değiştirdik. Bu sayede, uzaktan güncellemenin uygulandığından emin olabilirsiniz. (I65619) LoadParams.pageSize kaldırıldı (zaten kullanımdan kaldırılmıştı). PagingSource'unuzda
LoadParams.loadSize
kullanmanız önerilir.LoadParams.loadSize
, ilk yükleme çağrısı hariç her zamanPagingConfig.pageSize
değerine eşittir. İlk yükleme çağrısında isePagingConfig.initialLoadSize
değerine eşittir.Sayfalama veya PagedList kullanmadan Paging2 DataSource'unuzu test ediyorsanız
pageSize
,PagingConfig.pageSize
ile eşleşmeyebilir. Bunun nedeni,initialLoadSize
değerini de ayarlıyor olmanızdır. 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 ayarı yapılırken ayırıcılar kullanıldığında IllegalStateException nedeniyle oluşan kilitlenme sorunu düzeltildi. (I0ed33, b/174787528)
- RemoteMediator ayarlandıysa (I8cf5a), ilk yüklemeden hemen sonra PREPEND / APPEND için yükleme durumunun
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, destekleyiciDataSource
'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ünde şu commit'ler yer alıyor.
API Değişiklikleri
Desteği sonlandırılan
dataRefreshFlow
vedataRefreshListener
API'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
REFRESH
artık LoadState güncellemelerine doğru şekilde yayılıyor ve uzakAPPEND
ilePREPEND
öğelerinin tetiklenmesini engelliyor. (I94a3f, b/155290248) - Boş başlangıç sayfası veya yoğun filtreleme nedeniyle boş bir liste sunulması artık
PREPEND
veyaAPPEND
yüklemelerinin başlatılmasını engellemeyecek. (I3e702, b/168169730) - Geçersiz kılma işlemleri hızlı bir şekilde gerçekleştiğinde
getRefreshKey
iş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 kullanılırken hemen görünmeyebilir b/172254056
- RemoteMediator'ın kullanılması, geçersiz kılma ve
PagingSource.load(LoadParams.Refresh(...))
işlemleriRemoteMediator.load()
döndürmeden önce tamamlanırsa uzakLoadState
iş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ünde bu commit'ler yer alıyor.
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 bir geçersiz kılma işlemi tetiklendiğinde
IllegalArgumentException
hatası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.InvalidatedCallback
iş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,.map
veya.mapByPage
tarafı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, Sayfalama 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*
ConcatAdapter
yardımcılarının, arka plan iş parçacığından RecyclerView'a bildirim gönderilmesi 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ünde şu commit'ler yer alıyor.
API Değişiklikleri
- Async PagingData Guava tabanlı operatörler artık yürütme bağlamını kontrol etmek için parametre olarak Executor'ı kabul ediyor. (Id4372)
Hata Düzeltmeleri
- Yarış durumu 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 (ör. Room tarafından oluşturulan) dönüştürülmüş bir DataSource'u RemoteMediator ile birlikte kullanı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örleri eklediği için @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
UnsupportedOperationException
ile ilgili daha net mesajlar Sabit 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ünde aşağıdaki commit'ler yer alıyor.
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ünde şu commit'ler yer alıyor.
API Değişiklikleri
peek()
API'siAsyncPagingDataDiffer
vePagingDataAdapter
'ye eklenerek sunulan verilere sayfa yüklemeleri tetiklenmeden erişilmesine olanak tanındı. (I38898, b/159104197)- Gösterilen öğelerin sayfa getirme işlemi tetiklenmeden alınmasına olanak tanımak için
PagingDataAdapter
veAsyncPagingDataDiffer
'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 dönüşümleri test etmek için kullanılabilir. (Id134d) - dataRefresh Flow / Listener API'leri, REFRESH işleminde sunulan öğelerin durumunu göstermek için tasarlanmıştı. Ancak loadState Flow / Listener geri çağırma zamanlaması ve itemCount özelliği iyileştirildiğinden bu API'ler gereksiz hale geldi (Ia19f3).
PagingSource
veRemoteMediator
için RxJava3 uyumluluk sarmalayıcıları eklendi (I49ef3, b/161480176)
Hata Düzeltmeleri
PositionalDataSource
dönüştürülenPagingSource
,toPagingSourceFactory
yardımcı aracılığıyla,PagingSource
dahil olmak üzere artık atlamayı desteklemek için kendilerini doğru şekilde işaretliyor. (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ünde şu commit'ler yer alıyor.
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 bunu 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).
- Bazen PagingSource, hata döndürdükten sonra kaydırma yapıldığında PagingDataAdapter.retry() işlevinin yeniden denemesini engelleyen hata düzeltildi. (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, bırakma etkinliğinden sonra artık 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ünde şu commit'ler yer alıyor.
API Değişiklikleri
PagingConfig
oluşturucusuna, yaygın varsayılan değerlerle (I39c50, b/158576040) aşırı yüklemeler eklendi.- Ortak varsayılan değerlere (Ie91f5) sahip
PagingDataAdapter
veAsyncPagingDataDiffer
oluşturucuları için aşırı yüklemeler eklendi. dataRefreshFlow
vedataRefreshListener
bağ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 işlemi yapılması nedeniyle artık kilitlenmeye neden olmuyor. (I26358, b/158048877)- Yapılandırma değişikliğinden sonra oluşabilecek "sayfalayıcı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 özelliklerin etkinleştirilmesi 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ılamıyor. 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 kıyasla şu commit'leri içerir.
Hata Düzeltmeleri
- Geçersiz kılma sırasında konum dönüştürülürken nadir durumlarda
IndexOutOfBoundsException
ile ilgili düzeltme.
Yayın sorunu
Sayfalama sürümü
2.1.1
, yanlış yapılandırılmış bir daldan hatalı bir ş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 gelen 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
'ten 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
'ten 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
'ten 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.Builder
için Kotlin alternatifi olarak eklendiandroidx.paging.PagedList()
,PagedList.Builder
için Kotlin alternatifi olarak eklendiDataSourceFactory.toLiveData()
,LivePagedListBuilder
için Kotlin alternatifi olarak eklendiDataSourceFactory.toObservable()
vetoFlowable()
,RxPagedListBuilder
için Kotlin alternatifleri olarak 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 öğrenmek 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ğundaIndexOutOfBoundsException
hatası 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
Sayfalama 2.0.0
, tek bir hata düzeltmesiyle yayınlandı.
Hata Düzeltmeleri
PositionalDataSource
ve 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ı öne ekleme işlemlerinde (yer tutucular devre dışı, PositionalDataSource) içeriğin kaybolması sorunu düzeltildi. b/80149146
- (
1.0.1
sürümünde yayınlandı)PagedListAdapter
veAsyncPagedListDiffer
'nin taşıma etkinliklerini bildirememesine neden olan kilitlenme sorunları düzeltildi. b/110711937
AndroidX Öncesi Bağımlılıklar
Aşağıdaki Paging'in AndroidX öncesi sürümleri için bu 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
Sayfalama 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
PagedListAdapter
veAsyncPagedListDiffer
hareket etkinliklerini bildiremediğinde yaşanan 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 Paging Release Candidate
Paging 1.0.0
sürümü için başka bilinen sorunumuz veya planlanmış yeni özelliğimiz bulunmamaktadır. 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ılmamıştır. 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:rxjava2
yapı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.Builder
veLivePagedListBuilder
içinde)setMainThreadExecutor()
adlı öğeyisetNotifyExecutor()
olarak yeniden adlandırdı (PagedList.Builder
içinde).
PagedList.mCallbacks
üyesi gizli olarak ayarlandı.
Hata Düzeltmeleri
LivePagedListBuilder
, Arch Components IO iş parçacığı havuzu yerine belirtilen yürütücüde ilkPagedList
yüklemeyi tetikler.Dahili
DataSource
sarmalayıcılarındaki geçersiz kılma davranışı düzeltildi (DataSource.map
ve yer tutucu devre dışıPositionalDataSource
yü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.LoadParams
nesneleri artık herkese açık bir oluşturucuya sahip veDataSource.LoadCallback
nesneleri artık soyut. Bu,DataSource
sarmalamayı veya sahte bir geri arama ile doğrudanDataSource
test etmeyi sağlar. b/72600421- DataSource ve DataSource.Factory için eşleyiciler
map(Function<IN,OUT>)
,DataSource
tarafı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 sağlar (ö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.extensions
paketinin kalıntıları veLivePagedListProvider
dahil olmak üzere, desteği sonlandırılan tüm sınıflar API'den kaldırıldı.DataSource.Factory
, harita işlevini etkinleştirmek 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
DataSource
uygulaması artık çok tabanlı 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.onItemAtEndLoaded
işlevininPositionalDataSource
için ç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