Sayfa ayırma
Bu tabloda, androidx.paging
grubundaki tüm yapı taşları listelenir.
Yapı | Kararlı Sürüm | Sürüm Adayı | Beta Sürümü | Alfa Sürümü |
---|---|---|---|---|
paging-* | 3.3.4 | - | - | - |
paging-compose | 3.3.4 | - | - | - |
Bağımlılıkları beyan etme
Sayfalama bağımlılığı eklemek için Google Maven deposunu projenize eklemeniz gerekir. Daha fazla bilgi için Google'ın Maven deposunu inceleyin.
Uygulamanızın veya modülünüzün build.gradle
dosyasına ihtiyacınız olan yapıların bağımlılıklarını ekleyin:
Groovy
dependencies { def paging_version = "3.3.2" 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.3.2" }
Kotlin
dependencies { val paging_version = "3.3.2" 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.3.2") }
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ştirmek için fikirleriniz varsa lütfen bize bildirin. Yeni bir kitaplık oluşturmadan önce lütfen bu kitaplıktaki mevcut sorunlara göz atın. Yıldız düğmesini tıklayarak mevcut bir soruna oy verebilirsiniz.
Daha fazla bilgi için Sorun İzleyici belgelerine bakın.
Sürüm 3.3
3.3.4 sürümü
13 Kasım 2024
androidx.paging:paging-*:3.3.4
yayınlanır. 3.3.4 sürümü bu taahhütleri 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 vermez. (Ia9400, b/331684448)
3.3.2 sürümü
7 Ağustos 2024
androidx.paging:paging-*:3.3.2
yayınlanır. 3.3.2 sürümü bu taahhütleri içerir.
Yeni Özellikler
paging-common
vepaging-testing
, yeni Kotlin çok platformlu hedefleri ekledi:watchos
,tvos
velinuxArm64
(90c9768), (53e0eca)
3.3.1 sürümü
24 Temmuz 2024
androidx.paging:paging-*:3.3.1
yayınlanır. 3.3.1 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
- Kaydırma sırasında yedek veri kaynağı yenilendiğinde
AsyncPagingDataDiffer
veyaRecyclerView
ile kullanılanPagingDataAdapter
gibi bu API'lerin daha fazla yükleme tetikleyemediği sorun düzeltildi. (I60ca5, b/352586078) PagingDataAdapter
veyaAsyncPagingDataDiffer
kullanarak birRecyclerView
'te gezinirken öğeler yedek veri kaynağından kaldırıldığında oluşan kilitlenme düzeltildi. (I8c65a, b/347649763)
3.3.0 sürümü
14 Mayıs 2024
androidx.paging:paging-*:3.3.0
yayınlanır. 3.3.0 sürümü bu taahhütleri 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ıftır. Çok platformlu sunucuları artık dahili Sayfalama API'leri veyapaging-runtime
'unAsyncPagingDataDiffer
'si yerinePagingDataPresenter
üzerine inşa edebilirsiniz.LoadStates
'nin sırasıyla Hata veyaNotLoading
durumunda olup olmadığını kontrol etmek içinhasError
veisIdle
'e yeniLoadStates
veCombinedLoadStates
yardımcı yöntemleri eklendi. AyrıcaFlow<CombinedLoadStates>
üzerinde, yükünNotLoading
veya Hata durumuna gelene kadar bekleyen yeni birawaitNotLoading()
Kotlin uzantı yöntemi eklendi.PagingData.empty()
, oluşturucusuna özelLoadStates
iletilmediği sürece artık varsayılan olarakNotLoading
durumlarını dağıtır. Bu,PagingDataAdapter
'a gönderildiğindeLoadStates
'ü dağıtmayan veyaLazyPagingItems
olarak toplandığında Yükleniyor durumlarını dağıtan mevcut davranıştan farklıdır.LazyPagingItems
olarak toplandığında artık ilk derleme işleminden hemen sonra boş bir liste de gösterilir.
Kotlin Çok Platformlu Uyumluluk
Sayfalandırma, büyük ölçüde CashApp'ın multiplatform-paging projesinden gelen yayın öncesi çalışmalar sayesinde artık Kotlin Multiplatform ile uyumlu yapıları kullanıma sunuyor.
paging-common
, tüm Paging 3 API'lerinicommon
'e taşıdı ve artık Android'e ek olarak jvm ve iOS ile uyumlu.paging-testing
, kodunucommon
'e taşıdı ve artık Android'e ek olarak jvm ve iOS ile uyumlu.paging-compose
, kodunucommon
'a taşıdı veandroidx.compose
'nin çok platformlu desteğine uygun bir Android yapısını kullanıma sundu.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
, Sayfalandırma 3.3.0-beta01 sürümünde herhangi bir değişiklik içermeden yayınlanmıştır. 3.3.0-rc01 sürümü bu taahhütleri içerir.
Sürüm 3.3.0-beta01
3 Nisan 2024
androidx.paging:paging-*:3.3.0-beta01
, önemli bir değişiklik içermeden yayınlandı. 3.3.0-beta01 sürümü bu taahhütleri içerir.
Sürüm 3.3.0-alpha05
20 Mart 2024
androidx.paging:paging-*:3.3.0-alpha05
yayınlanır. 3.3.0-alpha05 sürümü bu taahhütleri içerir.
API Değişiklikleri
- Sayfalandırma, 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
yayınlanır. 3.3.0-alpha04 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
- Kotlin çok platformlu uyumluluğunun eklenmesi ile 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
yayınlanır. 3.3.0-alpha03 sürümü bu taahhütleri içerir.
Yeni Özellikler
PagingDataPresenter
artık herkese açık bir sınıftır. Çok platformlu sunucuları artık dahili Sayfalama API'leri veyapaging-runtime
'unAsyncPagingDataDiffer
'si yerinePagingDataPresenter
üzerine inşa edebilirsiniz. (Id1f74, b/315214786)LoadStates
değerinin Hata veyaNotLoading
durumunda olup olmadığını kontrol etmek için yeniLoadStates
veCombinedLoadStates
yardımcı yöntemleri eklendi. Ayrıca, yüklemeNotLoading
veya Hata durumuna gelene kadarLoadStateFlow
üzerinde bekleyen yeni bir API eklendi. (Id6c67)
Davranış değişikliği
PagingData.empty()
, oluşturucusuna özelLoadStates
iletilmediği sürece artık varsayılan olarakNotLoading
durumlarını dağıtır. Bu,PagingDataAdapter
'a gönderildiğindeLoadStates
'ü dağıtmayan veyaLazyPagingItems
olarak toplandığında Yükleniyor durumlarını dağıtan mevcut davranıştan farklıdır.LazyPagingItems
olarak toplandığında artık ilk derleme 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
yayınlanır. 3.3.0-alpha02 sürümü bu taahhütleri içerir.
Kotlin Çok Platformlu Uyumluluk
Sayfalandırma, büyük ölçüde CashApp'ın multiplatform-paging projesinden gelen yayın öncesi çalışmalar sayesinde artık Kotlin Multiplatform ile uyumlu yapıları kullanıma sunuyor. Bu sayede iki depo arasında farklılık olmasını önleyebilir ve depoların uyumlu kalmasını sağlayabiliriz.
paging-common
, tüm Paging 3 API'lerinicommon
'e taşıdı ve artık Android'e ek olarak jvm ve iOS ile uyumlu.paging-testing
, kodunucommon
'e taşıdı ve artık Android'e ek olarak jvm ve iOS ile uyumlu.paging-compose
, kodunucommon
'a taşıdı veandroidx.compose
'nin çok platformlu desteğine uygun bir Android yapısını kullanıma sundu.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 tasarlanmış herkese açık Logger arayüzünün desteği sonlandırıldı (I16e95, b/288623117)
Harici Katkı
- Sayfalandırma özelliğini Kotlin Multiplatform'a taşımamıza yardımcı olan Cash App'ten veyndan'a teşekkürler (#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ıları vardır. macOS, iOS ve Linux varyantları için3.3.0-alpha02
simgesini kullanın.
Sürüm 3.2
3.2.1 sürümü
6 Eylül 2023
androidx.paging:paging-*:3.2.1
yayınlanır. 3.2.1 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
asSnapshot()
, yüklemenin ne zaman bittiği hakkında hiçbir bilgiye sahip olmadığından (PagingData.from(List, LoadStates)
aşırı yüklemesinin aksine)PagingData.from(List)
kullanılarak oluşturulan bir akışa iletildiğinde Sayfalandırma Testi yapısınıasSnapshot()
API'sinin takılmasına neden olan sorun düzeltildi. Bu geçici çözüm yalnızca tamamlanabilir akışlar (ör.flowOf(PagingData.from(...))
) için işe yarar. Tamamlanamayan akışlar (ör.MutableStateFlow
,LoadStates
sağlayanPagingData.from
aşırı yüklemesini kullanın). (I502c3)- Sayfalandırma Oluşturma, artık yükleme işlemi tamamlandığında yeni verilerin aynı çerçevede kullanılabilmesi için dahili olarak
AndroidUiDispatcher.Main
kullanır. (Ia55af)
3.2.0 sürümü
26 Temmuz 2023
androidx.paging:paging-*:3.2.0
yayınlanır. 3.2.0 sürümü bu taahhütleri içerir.
3.1.0 sürümünden bu yana yapılan önemli değişiklikler
- Paging Compose, API kararlılığına ulaştı ve Paging'in geri kalanıyla yeniden birleştirildi. Sürümünün artık diğer tüm Paging yapılarıyla eşleştiği bu sürümde Paging Compose, API kararlılığına ulaştı ve Paging'in geri kalanıyla yeniden birleştirildi. Sürümünün artık diğer tüm Paging yapılarıyla eşleştiği bu sürümde 3.1.0 sürümünden bu yana yapılan değişikliklerden bazıları şunlardır:
PagingData.from(fakeData)
oluşturarak ve buPagingData
'yi birMutableStateFlow
(ör.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
) içine sarmalayarak sahte veri listesinin önizlemesi için destek. Bu akışı,collectAsLazyPagingItems()
'in önizlemesi için alıcı olarak@Preview
bileşenlerine iletin.LazyVerticalGrid
veHorizontalPager
gibi tüm gecikmeli düzenler ve Wear ile TV kitaplıklarındaki özel gecikmeli bileşenler için destek. Bu,key
vecontentType
parametreleriniLazyColumn
veLazyVerticalGrid
için halihazırda mevcut olan standartitems
API'lere veHorizontalPager
gibi API'lerdeki eşdeğerlerine uygulamanıza yardımcı olan yeni alt düzeyLazyPagingItems
uzantı yöntemleriitemKey
veitemContentType
sayesinde sağlandı.- Yalnızca
LazyListScope
'yi destekleyenitems(lazyPagingItems)
veitemsIndexed(lazyPagingItems)
desteği sonlandırıldı.
- Uygulamanızın her katmanını ve Paging ile entegrasyonunu tek tek birim test etmeye yönelik API'ler sağlayan yeni
paging-testing
yapı. Örneğin, aşağıdakiler dahildir:TestPager
sınıfı, kendi özelPagingSource
uygulamanızın davranışını Sayfalayıcı ve gerçek kullanıcı arayüzünden bağımsız olarak doğrulamanıza olanak tanır.-
Flow<List<Value>>
veya statikList<Value>
'yi testlerde bir Sayfalayıcı'ya iletilebilecekPagingSourceFactory
'e dönüştürenasPagingSourceFactory
API'leri Flow<PagingData<Value>>
üzerindeasSnapshot
Kotlin uzantısı,Flow<PagingData<Value>>
'ı doğrudanList<Value>
olarak çevirir.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, sayfalandırılmış veri kümenizin herhangi bir noktasında verilerin anlık görüntüsünün doğru olduğunu doğrulayabilirsiniz.
- 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]
komutu aracılığıyla etkinleştirilebilir. Bu durum hem Görünümlerle Sayfalama hem de Oluşturma ile Sayfalama için geçerlidir. PagingDataAdapter
veAsyncPagingDataDiffer
içinCoroutineDispatcher
yerineCoroutineContext
kabul eden yapıcılar eklendi.- Önceki () ->
PagingSource
lambda'larından daha net bir API yüzeyi sağlayan yeni birPagingSourceFactory
işlevsel arayüz eklendi. Bu fabrika, bir sayfalayıcıyı örneklemek için kullanılabilir.
Sürüm 3.2.0-rc01
21 Haziran 2023
androidx.paging:paging-*:3.2.0-rc01
yayınlanır. 3.2.0-rc01 sürümü bu taahhütleri içerir.
Harici Katkı
- Sayfalamayı Android/JVM'ye özgü olmaktan çıkarmaya katkıda bulunan Veyndan'a teşekkürler. (#553, #554, #555, #559)
Sürüm 3.2.0-beta01
7 Haziran 2023
androidx.paging:paging-*:3.2.0-beta01
yayınlanır. 3.2.0-beta01 sürümü bu taahhütleri içerir.
Sayfalama Oluşturma
- Sayfalama Oluşturma, 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 Sayfalama yapılarının sürümüyle eşleşiyor.
API Değişiklikleri
- Desteği sonlandırılan
items(LazyPagingItems)
veitemsIndexed(LazyPagingItems)
API'leri Sayfalama Oluşturma'dan kaldırıldı. Bu API'lerin yerine kullanılacak API'lere örnek olarak 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
yayınlanır. 3.2.0-alpha06 sürümü bu taahhütleri içerir.
Yeni Özellikler
- Mevcut
() -> PagingSource
lambda'lardan daha net bir API yüzeyi sağlayan yeni birPagingSourceFactory
işlevsel arayüz eklendi. Bu fabrika, birPager
örneği oluşturmak için kullanılabilir. (I33165, b/280655188) - Yalnızca değişmeyen bir veri listesinden yüklenen bir
PagingSourceFactory
almak içinList<Value>.asPagingSourceFactory()
'a yenipaging-testing
API eklendi. Birden fazla statik veri nesliyle test yapmak içinFlow<List<Value>>
'teki mevcut uzantı kullanılmaya devam edilmelidir. (Id34d1, b/280655188)
API Değişiklikleri
- Sayfalama testindeki tüm herkese açık API'ler, yalnızca testlerde kullanıldıklarından emin olmak için artık
@VisibleForTesting
ile ek açıklamaya sahiptir. (I7db6e) asSnapshot
API'de artıkCoroutineScope
iletilmesi gerekmez. Artık varsayılan olarak üst kapsamından devralınan bağlamı kullanır. (Id0a78, b/282240990)TestPager
kurucu parametreleri, gerçekPager
kurucu parametrelerinin sırasıyla sezgisel olarak eşleşecek şekilde yeniden düzenlendi (I6185a)- Sayfalama testi için kullanılan lambda türü
() -> PagingSource<Key, Value>
,PagingSourceFactory<Key, Value>
türüne taşındı. (I4a950, b/280655188)
Davranış Değişiklikleri
asSnapshot
Sayfalama testlerini çalıştırmak için artık ana dağıtıcı gerekli değildir. Bu ayar artık test davranışında herhangi bir değişiklik yapmaz. (Ie56ea)
Sürüm 3.2.0-alpha05
3 Mayıs 2023
androidx.paging:paging-*:3.2.0-alpha05
yayınlanır. 3.2.0-alpha05 sürümü bu taahhütleri içerir.
API Değişiklikleri
asSnapshot
'ün Sayfalama Testi API'si artıkloadOperations
parametresini varsayılan olarak boş bir lambda olarak ayarlıyor. Bu sayede, ilk yenileme yüklemesinden verileri almak için herhangi bir yükleme işlemi iletmedenasSnapshot
çağrılabilir. (Ied354, b/277233770)
Belgelerde Yapılan İyileştirmeler
asPagingSourceFactory()
ile ilgili dokümanları,Flow
üzerindePagingSource
örnekleri oluşturmak için yeniden kullanılabilir bir fabrika döndüren bir uzantı yöntemi olduğunu açıklayacak şekilde güncelledik. (I5ff4f, I705b5)- Atlamayı desteklemek için
itemsBefore
veitemsAfter
'nin geçersiz kılınması gerektiğini açıklığa kavuşturmak amacıylaLoadResult.Page
yapıcıyla ilgili dokümanlar güncellendi. (Ied354)
Harici Katkılar
- Sayfalamayı Android/JVM'ye özgü olmaktan çıkarmaya katkıda bulunan Veyndan'a teşekkürler. (#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
yayınlanır. 3.2.0-alpha04 sürümü bu taahhütleri içerir.
Sayfalama Testi
paging-testing
yapıları artık birFlow<List<Value>>
'tenpagingSourceFactory
oluşturmak için birasPagingSourceFactory
yöntemi içeriyor. Bu yöntem, bir sayfalayıcıya sağlanır. Akıştan yayınlanan herList<Value>>
, sayfalı veri oluşumunu temsil eder. Bu, sayfalayıcının toplayacağı bir veri kaynağı taklit ederekPagingData
dönüşümleri gibi sayfalama testlerini kolaylaştırır. (I6f230, b/235528239)paging-testing
yapıları,Flow<PagingData<T>>
içinde bulunan verilerin doğru olduğunu doğrulamak için uygun yeni API'lerle genişletildi. Bu, örneğin ViewModel katmanınızdaki birFlow<PagingData<T>>
öğesinin çıktısını doğrulamak için kullanılabilir.Bu işlem,
Flow<PagingData<Value>>
'dakiasSnapshot
Kotlin uzantısı aracılığıyla yapılır. Bu uzantı,Flow<PagingData<Value>>
'ı doğrudanList<Value>
'ye çevirir.asSnapshot
lambda, sayfalandırılmış veri kümenizin herhangi bir noktasında verilerin anlık görüntüsünün doğru olduğunu doğrulayabilmeniz içinscrollTo
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.// 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 coroutine'lerini 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
'dakigetItem
vepeek
kullanıcı arayüzü çağrıları artık yalnızca ana mesaj dizisinde çağrılabilir olarak doğru şekilde işaretlendi. (I699b6)TestPager
tarafından kullanılan genel türlerden joker karakterler kaldırıldı. Bu sayede, bu yöntemlerin sonuçlarını Java programlama dilinde yazılmış kodda kullanmak daha kolay hale geldi. (I56c42)
Sürüm 3.2.0-alpha03
24 Ekim 2022
androidx.paging:paging-*:3.2.0-alpha03
yayınlanır. 3.2.0-alpha03 sürümü bu taahhütleri içerir.
Sayfalama Testi
Bu sürümde yeni bir yapı (paging-testing
) yer alır. Bu yapı, uygulamanızın her katmanını ve Paging ile entegrasyonunu ayrı ayrı birim testine yönelik olarak tasarlanmış API'ler sağlar.
Örneğin, bu ilk sürümde, kendi özel PagingSource
uygulamanızın davranışını, uçtan uca Sayfalama entegrasyonunu simüle etmek için normalde ihtiyaç duyacağınız Pager
ve gerçek kullanıcı arayüzünden bağımsız olarak doğrulamanıza olanak tanıyan bir TestPager
sınıfı yer alır.
TestPager
, Pager
'in gerçek uygulamasını yansıtan ve PagingSource
'i test etmek için basitleştirilmiş bir API yüzeyi sağlayan bir sahte (test çifti) olarak kabul edilmelidir. Bu API'ler suspend
API'leridir ve Android'de Kotlin iş parçacıklarını test etme kılavuzunda belirtildiği gibi runTest
içinde çalıştırılmalıdır.
Bu API'lerin kullanıma yönelik bir örneğini, TestPager
kullanılacak şekilde yeniden yapılandırılmış room-paging
testlerinde bulabilirsiniz.
API Değişiklikleri
LoadResult.Page.data
ileLoadResult.Page.iterator()
arasında kolay iterasyon sağlar. Bu,PagingState
nesnesininpages
özelliğiPagingSource.getRefreshKey
yöntemine aktarıldığında olduğu gibi birList<LoadResult.Page>
verildiğinde dolaylı olarak Kotlin standart kitaplığıflatten
yönteminin 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
yayınlanır. 3.2.0-alpha02 sürümü bu taahhütleri içerir.
Yeni Özellikler
- Sayfalama, artık
PagingData
'den toplanan hata ayıklama bilgilerini göstermek içinAsyncPagingDataDiffer
veyaPagingDataAdapter
sınıfları aracılığıyla günlükler sağlıyor. - Günlükler,
adb shell
komutuadb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159) aracılığıyla etkinleştirilebilir.
Hata Düzeltmeleri
paging-common:3.2.0-alpha01
,paging-runtime:3.1.1
veya daha eski bir çalışma zamanında kullanılırken eksikPagingDataDiffer
kurucu hatası düzeltildi.(b/235256201)
Sürüm 3.2.0-alpha01
1 Haziran 2022
androidx.paging:paging-*:3.2.0-alpha01
yayınlanır. 3.2.0-alpha01 sürümü bu taahhütleri içerir.
API Değişiklikleri
PagingDataAdapter
veAsyncPagingDataDiffer
içinCoroutineDispatcher
yerineCoroutineContext
kabul eden yapıcılar eklendi. (Idc878)- Varsayılan olarak
PagingData.from()
vePagingData.empty()
artık sunucu tarafındakiCombinedLoadStates
'yi etkilemeyecektir.LoadStates
'yi tamamen terminal (yani,sourceLoadStates
remoteLoadStates
NotLoading(endOfPaginationReached = false)
) seçebilirsiniz. Gerekirse uzak eyaletleri de dahil etme seçeneğiniz vardır.LoadStates
iletilmezse statikPagingData
alındığında sunucu tarafında öncekiCombinedLoadStates
korunur. (Ic3ce5, b/205344028)
Hata Düzeltmeleri
PagingSource.getRefreshKey()
sonucu, artık boş değer döndüreceği durumlardainitialKey
'a göre doğru şekilde önceliklendiriliyor ancak boş olmayan birinitialKey
ayarlandıysa. (Ic9542, b/230391606)
Harici Katkı
- test-coroutines-lib taşıma işlemi nedeniyle :compose:ui:ui-test api'si (updateApi) güncellendi (I3366d)
3.1 sürümü
3.1.1 sürümü
9 Mart 2022
androidx.paging:paging-*:3.1.1
yayınlanır. 3.1.1 sürümü bu taahhütleri 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üklemelerin yeniden denenmesi, yenileme veya geçersiz kılma sırasında oluşturulan gereksizLoadState.NotLoading
etkinliklerini kaldırarakLoadState
değişikliklerine tepki vermeyi çok daha kolay hale getirir.
3.1.0 sürümü
17 Kasım 2021
androidx.paging:paging-*:3.1.0
yayınlanır. 3.1.0 sürümü bu taahhütleri 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ğil- Davranış
LoadState
olarak değişir:endOfPaginationReached
artık hemPagingSource
hem deRemoteMediator
içinLoadType.REFRESH
için her zamanfalse
değerini alır.- Sayfalama'dan gelen
LoadStates
, yayını aşağı akışa göndermeden önce artık hemPagingSource
hem deRemoteMediator
'den geçerli değerler bekler. Yeni nesilPagingData
'ler artık bazı durumlarda yanlışlıklaNotLoading
olarak sıfırlanmak yerine yenileme durumu için her zaman doğru şekildeLoading
ile başlayacak. - Sunucu API'lerindeki
.loadStateFlow
ve.addLoadStateListener
artık her zaman arabulucu durumlarınınnull
olarak ayarlandığı ilk birCombinedLoadStates
göndermiyor
- Geçmiş nesillerdeki iptal işlemi artık geçersiz kılma / yeni nesillerde istekli bir şekilde gerçekleşiyor.
Flow<PagingData>
üzerinde.collectLatest
kullanmanın artık gerekli olmamasına rağmen bunu yapmanız yine de önerilir. PagingSource.LoadResult.Invalid
,PagingSource.load
tarafından yeni bir döndürme türü olarak eklendi. Bu durum, Paging'in buPagingSource
için bekleyen veya gelecekteki tüm yükleme isteklerini atmasına ve geçersiz kılmasına neden olur. Bu döndürme türü, veritabanından veya ağdan döndürülebilecek geçersiz veya eski olabilecek verileri işlemek için tasarlanmıştır.- Sayfalar kullanıcı arayüzünde sunulurken senkronize olarak tetiklenen
.onPagesPresented
ve.addOnPagesUpdatedListener
sunucu API'leri eklendi. Sayfa güncellemeleri aşağıdaki durumlarda gerçekleşebilir:- Yeni nesil PagingData'nın ilk yüklenmesi, yeni neslin sunulan öğelerde herhangi bir değişiklik içerip içermediğinden bağımsız olarak tamamlanır. Liste tam olarak aynı olduğu için ilk yüklemeyi güncelleme olmadan tamamlayan yeni bir nesil bu geri çağırmayı tetikler.
- Eklenen sayfa yeni öğe içermese bile bir sayfa eklenir.
- Kaldırılan sayfa boş olsa bile sayfa kaldırılır.
Sürüm 3.1.0-rc01
3 Kasım 2021
androidx.paging:paging-*:3.1.0-rc01
yayınlanır. 3.1.0-rc01 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
- Gözlemci olmadığında veya bir gözlemci yeni bir PagingData'ya geçerken Paging tarafından yayın aşağı akışına birden fazla yükleme etkinliği gönderildiği durumlarda .cachedIn() işlevinde yarış koşulu ve bellek sızıntısı düzeltildi. (Ib682e)
Sürüm 3.1.0-beta01
13 Ekim 2021
androidx.paging:paging-*:3.1.0-beta01
yayınlanır. 3.1.0-beta01 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
- Çok sayıda hızlı öğe erişiminin, öğelerin prefetchDistance'te dikkate alınmak üzere bırakılmasına ve sayfa yüklemelerinin duraklamasına neden olduğu sorun düzeltildi. Bu durum özellikle, kullanıcının kaydırma yönüne göre yüklemeye öncelik verecek bir sırada birden fazla öğe aynı anda yerleştirildiğinde sorun oluşturur. Bu öğe erişimleri artık arabelleğe alınır ve atlanmalarını önlemek için senkronize olarak öncelik verilir. (aosp/1833273)
Sürüm 3.1.0-alpha04
29 Eylül 2021
androidx.paging:paging-*:3.1.0-alpha04
yayınlanır. 3.1.0-alpha04 sürümü bu taahhütleri 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
,LoadType.REFRESH
için artık her zamanfalse
değerini alır. Daha önce, endOfPaginationReached değerinin RemoteMediatorREFRESH
içintrue
olması mümkündü ancak PagingSource için mümkün değildi. REFRESH'in sonlandırıcı olması hiçbir zaman mantıklı olmadığından bu davranış artık her zamanfalse
döndürecek şekilde birleştirildi ve LoadStates'teki API sözleşmesinin bir parçası olarak belgelendi. Sayfalandırmanın sonlandırılıp sonlandırılmayacağına karar verirken bunu her zaman APPEND veya PREPEND yönergelerine göre yapmanız gerekir. (I047b6) Sayfalama'dan gelen LoadStates, artık nesiller arasında yayın yapmadan önce hem PagingSource hem de RemoteMediator'dan geçerli değerler bekler. Bu, yeni nesil PagingData'ların, zaten Loading durumundaysa CombinedLoadStates.source.refresh içinde NotLoading göndermesini önler. Yeni nesil PagingData'lar artık bazı durumlarda önce yanlışlıkla NotLoading olarak sıfırlanmak yerine her zaman yenileme durumu için Loading ile doğru şekilde başlar.
Eski nesillerde iptal işlemi artık geçersiz kılma/yeni nesillerde ise istekli bir şekilde gerçekleşiyor.
Flow<PagingData>
üzerinde .collectLatest işlevinin kullanılması artık gerekli olmasa da bunu yapmanız önemle tavsiye edilir. (I0b2b5, b/177351336, b/195028524)Sunucu API'lerindeki
.loadStateFlow
ve.addLoadStateListener
artık her zaman arabulucu durumlarınınnull
ve kaynak durumlarınınNotLoading(endOfPaginationReached = false)
olarak ayarlandığı ilk birCombinedLoadStates
göndermiyor. Bunun anlamı:- RemoteMediator'ı kullanıyorsanız mediator durumları her zaman doldurulur.
.loadStateFlow
üzerinde yeni bir loadState dinleyicisi veya toplayıcısı kaydettiğinizde,PagingData
'den gerçek birCombinedLoadStates
almamışsa artık mevcut değer hemen yayınlanmaz. Bu durum, bir toplayıcı veya dinleyiciPagingData
gönderilmeden önce başlarsa gerçekleşebilir. (I1a748)
Sürüm 3.1.0-alpha03
21 Temmuz 2021
androidx.paging:paging-*:3.1.0-alpha03
yayınlanır. 3.1.0-alpha03 sürümü bu taahhütleri içerir.
API Değişiklikleri
PagingSource'a üçüncü bir LoadResult döndürme türü olan LoadResult.Invalid eklendi. PagingSource.load, LoadResult.Invalid değerini döndürdüğünde sayfalandırma, yüklenen verileri atar ve PagingSource'ı geçersiz kılar. Bu döndürme türü, veritabanından veya ağdan döndürülebilecek geçersiz veya eski olabilecek verileri işlemek için tasarlanmıştır.
Örneğin, temel veritabanına veri yazılırsa ancak PagingSource zamanında geçersiz kılınmazsa, uygulama şekli, yüklediği destekleyici veri kümesinin değişmezliğine bağlıysa tutarsız sonuçlar döndürebilir (ör. LIMIT OFFSET stilindeki veritabanı uygulamaları). Bu senaryoda, yükleme işleminden sonra geçersizleştirme olup olmadığını kontrol etmek ve LoadResult.Invalid döndürmek önerilir. Bu, Paging'in bu PagingSource için bekleyen veya gelecekteki tüm yükleme isteklerini atmasına ve geçersizleştirmesine neden olur.
Bu döndürme türü, LivePagedList veya RxPagedList'ten yararlanan Paging2 API tarafından da desteklenir. Paging2'nin PagedList API'leriyle bir PagingSource kullanıldığında PagedList hemen ayrılır. Bu, bu PagedList'e veri yüklemeyle ilgili diğer girişimleri durdurur ve PagingSource'da geçersiz kılma işlemini tetikler.
LoadResult, mühürlü bir sınıftır. Bu, kaynakla uyumlu olmayan bir değişikliktir. Bu nedenle, doğrudan PagingSource.load sonuçlarını kullanan kullanım alanlarının derleme sırasında LoadResult.Invalid değerini kullanması gerekir. Örneğin, döndürülen türü kontrol etmek için exhaustive-when özelliğinden 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ğırma işlevleri, zaten geçersiz olan bir PagingSource / DataSource'a kaydedilmişse artık otomatik olarak tetiklenir. Bu, ilk yükleme sırasında zaten geçersiz olan bir Kaynak sağlandığında Sayfalama'nın geçersiz kılma sinyallerini bırakmasına ve takılmasına neden olan bir yarış koşulunu çözer. Ayrıca, en fazla bir kez çağrılmaları garanti edildiğinden, invalidate geri çağırma işlevleri artık tetiklendikten sonra düzgün şekilde kaldırılıyor. (I27e69)
- Yeni oluşturulmuş 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 temizlemez.
Sürüm 3.1.0-alpha02
1 Temmuz 2021
androidx.paging:paging-*:3.1.0-alpha02
yayınlanır. 3.1.0-alpha02 sürümü bu taahhütleri içerir.
Yeni Özellikler
Sunulan sayfalar kullanıcı arayüzünde güncellendikten hemen sonra tetiklenen onPagesPresented dinleyici ve akış sunucu 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öntemleri çağırabilirsiniz. .snapshot() işlevinin, her güncellemede yapılması pahalı olabileceği için açıkça çağrılmaya 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 neslin sunulan öğelerde herhangi bir değişiklik içerip içermediğinden bağımsız olarak tamamlanır. Liste tam olarak aynı olduğu için ilk yüklemeyi güncelleme olmadan tamamlayan yeni bir nesil bu geri çağırmayı tetikler.
- Eklenen sayfa yeni öğe içermese bile bir sayfa eklenir
- Boş olsa bile bir sayfa bırakılır (I272c9, b/189999634)
Hata Düzeltmeleri
- LivePagedList veya RxPagedList tarafından üretilen ilk değerden PagedList.dataSource'a erişmek artık yanlışlıkla IllegalStateException (I96707) hatası atmayacak
Sürüm 3.1.0-alpha01
2 Haziran 2021
androidx.paging:paging-*:3.1.0-alpha01
yayınlanır. 3.1.0-alpha01 sürümü bu taahhütleri içerir.
API Değişiklikleri
paging-rxjava3
tarafından sağlanan sınıflar,paging-rxjava2
ile çakışmamaları için artıkandroidx.paging.rxjava3
paketi altında yer alıyor (Ifa7f6)
Hata Düzeltmeleri
- Sayfalandırmanın bazen RecyclerView'e işlemsiz farklı etkinlik göndermesi ve bu durumun belirli dinleyicilerin erken tetiklenmesine neden olması sorunu düzeltildi. (Ic507f, b/182510751)
Harici Katkı
- Desteği sonlandırılan PagedList uyumlu API'leri rxjava3 yapılarına eklendi (Id1ce2, b/182497591)
Sayfalandırma Oluşturma 1.0.0 sürümü
Sürüm 1.0.0-alpha20
24 Mayıs 2023
androidx.paging:paging-compose:1.0.0-alpha20
yayınlanır. 1.0.0-alpha20 sürümü bu taahhütleri içerir.
Yeni Özellikler
- Sayfalandırma Oluşturma özelliği artık bir
PagingData.from(fakeData)
oluşturarak ve buPagingData
'yi birMutableStateFlow
içine sarmalayarak (ör.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Bu verileri@Preview
'unuza giriş olarak kullanarakcollectAsLazyPagingItems()
çağrıları önizlenebilirLazyPagingItems
sağlar. (I8a78d, b/194544557)
Hata Düzeltmeleri
pager.flow.cachedIn
'tenLazyPagingItems
'te toplanan önbelleğe alınmış veriler artık durum geri yüklendikten sonra eşzamansız toplama gerektirmeden hemen kullanılabilir. Bu, önbelleğe alınan verilerin, durum geri yüklendikten sonra ilk kompozisyondan hemen sonra 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
yayınlanır. 1.0.0-alpha19 sürümü bu taahhütleri içerir.
Tüm yavaş düzenleri destekleme
Daha önce Sayfa Düzeni Oluşturma, LazyListScope
üzerinde özel items
ve itemsIndexed
uzantıları sağlıyordu. Bu nedenle Sayfa Düzeni Oluşturma'yı LazyVerticalGrid
, HorizontalPager
gibi diğer gecikmeli düzenlerle veya Wear ve TV kitaplıkları tarafından sağlanan diğer özel gecikmeli bileşenlerle kullanamıyordunuz. Bu esnek olmayan durumu düzeltmek, bu sürümün birincil güncellemesidir.
Daha fazla ertelenen düzeni desteklemek için API'leri farklı bir katmanda oluşturmamız gerekiyordu. Her ertelenen düzen için özel bir items
API sağlamak yerine Paging Compose artık itemKey
ve itemContentType
'te LazyPagingItems
için biraz daha düşük düzeyde uzantı yöntemleri sağlıyor. Bu API'ler, key
ve contentType
parametrelerini LazyColumn
ve 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
desteklemenin aşağıdaki gibi 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ıyla ilgili 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 tüm yavaş düzenler arasında tutarlılığın, Sayfa Düzeni Oluşturma'yı kullananlar için ö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
'dekiitems
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
- Sayfalandırma için 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ü bu taahhütleri içerir.
Sürüm 1.0.0-alpha17
24 Ekim 2022
androidx.paging:paging-compose:1.0.0-alpha17
yayınlanır. 1.0.0-alpha17 sürümü bu taahhütleri içerir.
Yeni Özellikler
collectLazyPagingItems
'yi ararken özelCoroutineContext
desteği ekleyin. (I7a574, b/243182795, b/233783862)
Sürüm 1.0.0-alpha16
10 Ağustos 2022
androidx.paging:paging-compose:1.0.0-alpha16
yayınlanır. 1.0.0-alpha16 sürümü bu taahhütleri içerir.
Yeni Özellikler
- Paging, artık PagingData'dan toplanan hata ayıklama bilgilerini göstermek için
LazyPagingItems
sınıfı aracılığıyla günlükler sağlar. - 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 sürümlerle kullanıldığında eksikPagingDataDiffer
kurucu hatası düzeltildi.(b/235256201,b/239868768)
Sürüm 1.0.0-alpha15
1 Haziran 2022
androidx.paging:paging-compose:1.0.0-alpha15
yayınlanır. 1.0.0-alpha15 sürümü bu taahhütleri içerir.
API Değişiklikleri
PagingDataAdapter
veAsyncPagingDataDiffer
içinCoroutineDispatcher
yerineCoroutineContext
kabul eden yapıcılar eklendi. (Idc878)
Hata Düzeltmeleri
LazyPagingItems
artık ilkloadState
öğesiniLoadState.Loading
yenilemesi için ayarlar. (I55043, b/224855902)
Sürüm 1.0.0-alpha14
13 Ekim 2021
androidx.paging:paging-compose:1.0.0-alpha14
yayınlanır. 1.0.0-alpha14 sürümü bu taahhütleri içerir.
Sürüm 1.0.0-alpha13
29 Eylül 2021
androidx.paging:paging-compose:1.0.0-alpha13
yayınlanır. 1.0.0-alpha13 sürümü bu taahhütleri içerir.
API Değişiklikleri
LazyPagingItems.snapshot()
işlevi,LazyPagingItems.itemSnapshotList
mülküyle değiştirildi (Ie2da8)- 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
yayınlanır. 1.0.0-alpha12 sürümü bu taahhütleri içerir.
API Değişiklikleri
- Sayfalama'yı
LazyColumn/Row
ile bağlamak için kullanılanitems(lazyPagingItems)
veitemsIndexed(lazyPagingItems)
artık öğeyi temsil eden kararlı bir anahtar belirtmenize olanak tanıyan seçenek anahtarı 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
yayınlanır. 1.0.0-alpha11 sürümü bu taahhütleri içerir.
Sürüm 1.0.0-alpha10
2 Haziran 2021
androidx.paging:paging-compose:1.0.0-alpha10
yayınlanır. 1.0.0-alpha10 sürümü bu taahhütleri içerir.
Sürüm 1.0.0-alpha09
18 Mayıs 2021
androidx.paging:paging-compose:1.0.0-alpha09
yayınlanır. 1.0.0-alpha09 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
- LazyPagingItems'in itemCount ve item getter özellikleri artık gözlemlenebilir durumda. 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 sürümlerin yüklü olduğu Oluştur ile uyumludur.
Sürüm 1.0.0-alpha08
24 Şubat 2021
androidx.paging:paging-compose:1.0.0-alpha08
yayınlanır. 1.0.0-alpha08 sürümü bu taahhütleri 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
yayınlanır. 1.0.0-alpha07 sürümü bu taahhütleri içerir.
Compose alpha12 ile entegre edilecek şekilde güncellendi.
Sürüm 1.0.0-alpha06
28 Ocak 2021
androidx.paging:paging-compose:1.0.0-alpha06
yayınlanır. 1.0.0-alpha06 sürümü bu taahhütleri 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
yayınlanır. 1.0.0-alpha05 sürümü bu taahhütleri 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
yayınlanır. 1.0.0-alpha04 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
- Uzaktan güncellemenin uygulandığından emin olmak için
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
veCombinedLoadStates.append
kolaylık özelliklerini, yalnızca arabulucu ve kaynak yükleme durumlarıNotLoading
olduğundaLoading
'tanNotLoading
'a geçiş yapacak şekilde güncellendi. (I65619)
Sürüm 1.0.0-alpha03
2 Aralık 2020
androidx.paging:paging-compose:1.0.0-alpha03
yayınlanır. 1.0.0-alpha03 sürümü bu taahhütleri 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
yayınlanır. 1.0.0-alpha02 sürümü bu taahhütleri içerir.
API Değişiklikleri
AsyncPagingDataDiffer
/PagingDataAdapter
'de bulunan işlevleri gösteren.peek()
,.snapshot()
,.retry()
ve.refresh()
yöntemleriLazyPagingItem
'lere eklendi (Iddfe8, b/172041660)
Sürüm 1.0.0-alpha01
28 Ekim 2020
androidx.paging:paging-compose:1.0.0-alpha01
yayınlanır. 1.0.0-alpha01 sürümü bu taahhütleri içerir.
Yeni Özellikler
paging-compose
yapı, Sayfalama Kitaplığı 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
yayınlanır. 3.0.1 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
LivePagedList
veyaRxPagedList
tarafından üretilen ilk değerdenPagedList.dataSource
'e erişmek artık yanlış bir şekilde IllegalStateException (I96707) hatası atmayacak.
Sürüm 3.0.0
Sürüm 3.0.0
5 Mayıs 2021
androidx.paging:paging-*:3.0.0
yayınlanır. 3.0.0 sürümü bu taahhütleri içerir.
3.0.0 sürümünün önemli özellikleri
Sayfalandırma 2.x.x API'sinin çoğu, aşağıdaki iyileştirmeleri sunmak için yeni Sayfalandırma 3 API'leri lehine kullanımdan kaldırıldı:
- Kotlin coroutine'leri ve Flow için birinci sınıf destek
- İptalle ilgili destek
- Dahili yükleme durumu ve hata sinyalleri
- Yeniden deneme ve yenileme işlevi
- Üç DataSource alt sınıfının tümü birleştirilmiş bir PagingSource sınıfında birleştirildi
- Ayrıştırıcı eklemek için yerleşik bir dönüşüm de dahil olmak üzere özel sayfa dönüşümleri
- Eyalet üstbilgileri ve altbilgileri yükleniyor
3.0.0-rc01 sürümü
21 Nisan 2021
androidx.paging:paging-*:3.0.0-rc01
yayınlanır. 3.0.0-rc01 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
- Sayfalandırmanın bazen RecyclerView'e işlemsiz farklı etkinlik göndermesi ve bu durumun belirli dinleyicilerin erken tetiklenmesine neden olması sorunu düzeltildi. (Ic507f, b/182510751)
Sürüm 3.0.0-beta03
24 Mart 2021
androidx.paging:paging-*:3.0.0-beta03
yayınlanır. 3.0.0-beta03 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
- RecyclerView'de beklenmedik atlamaları önlemek için liste yeniden yüklendiğinde yer tutucuların nasıl ele alındığını yeni baştan tasarladık. Ayrıntılar için NullPaddedDiffing.md dosyasını inceleyin. (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()
'yi yanlışlıkla eşzamanlı olarak çağırmıyor. (b/182798948)
Sürüm 3.0.0-beta02
10 Mart 2021
androidx.paging:paging-*:3.0.0-beta02
yayınlanır. 3.0.0-beta02 sürümü bu taahhütleri içerir.
API Değişiklikleri
- Rx3 uzantıları artık
@ExperimentalCoroutinesApi
etkinleştirme koşulunu doğru şekilde dağıtıyor. Daha önce,@get
yönteminde işaretleniyordu. Bu yöntem, şu nedenle Kotlin Derleyicisi tarafından yoksayılıyor: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Hata Düzeltmeleri
- Deneysel API'lerin herkese açık kullanımıyla ilgili kısıtlamaları zorunlu kılma (I6aa29, b/174531520)
- Uzak yenileme çağrısı yapıldığında
PagingState
değerinin her zamannull
olmasına neden olan bir hata düzeltildi. - PagingSource tarafından döndürülen boş sayfaların,
prefetchDistance
'yi karşılamak için Paging'in tekrar getirilmesini engelleyebileceği ve Paging'in "takılmasına" neden olduğu bir hata düzeltildi.
Sürüm 3.0.0-beta01
10 Şubat 2021
androidx.paging:paging-*:3.0.0-beta01
yayınlanır. 3.0.0-beta01 sürümü bu taahhütleri içerir.
API Değişiklikleri
- Rx2 ve Rx3 sarmalayıcıları artık bağlı olduğu deneme amaçlı ek açıklamayı gösterir. paging-rxjava2 veya paging-rxjava3'te Rx uyumlu sarmalayıcıları kullanıyorsanız artık kullanımları
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d) ile notlandırmanız gerekir.
Hata Düzeltmeleri
- Uyumluluk yolları üzerinden v2
DataSource
API'leri kullanılırken bazenIndexOutOfBoundsException: Inconsistency detected
hatası oluşması düzeltildi - Uyumluluk yolları üzerinden kullanıldığında
DataSource
'nin başlatılması sırasındakiisInvalid
çağrısı artık ana iş parçacığı yerine fetchDispatcher'da doğru şekilde başlatılıyor. Bu, Room'unPagingSource
uygulaması kullanılırken ana iş parçacığında Db erişimi nedeniyle oluşan birIllegalStateException
sorununu düzeltir.
Sürüm 3.0.0-alpha13
27 Ocak 2021
androidx.paging:paging-*:3.0.0-alpha13
yayınlanır. 3.0.0-alpha13 sürümü bu taahhütleri içerir.
API Değişiklikleri
PagingSource.getRefreshKey
artık isteğe bağlı olarak uygulanamaz. Artık varsayılan bir uygulamaya sahip olmayan soyut bir işlevdir. Taşıma işlemini gerçekleştiren kullanıcılar, varsayılan uygulamayı döndürmeye devam edebilir. Bu uygulama yalnızcanull
döndürür. AncakgetRefreshKey()
, kullanıcının mevcut kaydırma konumuna göre bir anahtar döndüren gerçek bir uygulamaya sahip olmalıdır. Bu uygulama, mümkünse sayfalandırmanınPagingState.anchorPosition
aracılığıyla görüntü alanı etrafında merkezli olarak yüklenmeye devam etmesine olanak tanır. (I4339a)InvalidatingPagingSourceFactory
artık nihai sınıf (Ia3b0a)- İsteğe bağlı ek bir SeparatorType parametresi ile 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'un endOfPaginationReached değerini işaretlemesini bekleyin. RemoteMediator kullanılmazsa uzak loadState yoksayılır. Bu özellik, uzak kaynaktan (ör. ağ) getirme dahil olmak üzere yalnızca bölüm tamamen yüklendiğinde bölüm ayırıcılarını göstermek istiyorsanız özellikle kullanışlıdır.SOURCE_COMPLETE
: RemoteMediator kullanılsa bile yalnızca PagingSource'ın endOfPaginationReached değerini işaretlemesini bekleyin. Bu sayede, üstbilgi ve altbilgilerin ilk yüklemeyle senkronize olarak sunulmasını sağlayarak kullanıcıların terminal ayırıcılarını görmek için kaydırması gerekmez. (Ibe993, b/174700218)
Hata Düzeltmeleri
- PageFetcher'dan veri yüklemeye başlamadan önce bir PagingSource geçersiz kılındığında ortaya çıkan 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
yayınlanır. 3.0.0-alpha12 sürümü bu taahhütleri içerir.
API Değişiklikleri
- Hiçbir soyut yöntemi olmadığı için InvalidatingPagingSourceFactory artık soyut bir sınıf değildir. (I4a8c4)
- Java kullanıcıları için Lifecycle veya CoroutineScope yerine ViewModel'u kabul eden .cachedIn() işlevinin aşırı yüklemesi eklendi. (I97d81, b/175332619)
- Java arayanlarının, dönüştürme operatörü bağımsız değişkenlerine bir Executor kabul ederek PagingData dönüştürme işlemlerini ayarsız bir şekilde kullanmasına izin verin. Tüm -Sync dönüştürme operatörlerinin -Sync son eki artık kaldırıldı ve Kotlin Coroutine kullanıcılarının, bunun yerine askıya alma bloğu kabul eden uzantı işlevini çağırarak anlam karışıklığını gidermesi gerekiyor.
Tüm PagingData dönüşüm operatörleri, statik PagingDataTransforms sınıfının altındaki uzantılara taşındı. Java kullanıcılarının bunları statik yardımcılar aracılığıyla çağırması gerekir (ör.
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
- Sayfalandırmanın sonuna ulaşılmışsa
adapter.refresh()
sırasındaRemoteMediator.load()
çağrılmaması sorunu düzeltildi.
Sürüm 3.0.0-alpha11
16 Aralık 2020
androidx.paging:paging-*:3.0.0-alpha11
yayınlanır. 3.0.0-alpha11 sürümü bu taahhütleri içerir.
Yeni Özellikler
- Aşağıdaki temel kullanım alanları için kayıtlı durum desteği eklendi (özellikle katmanlı kaynak durumunda tam destek henüz kullanıma sunulmamıştır):
- akış önbelleğe alınır ve uygulama sonlandırılmaz (ör. akış bir görünüm modelinde önbelleğe alınır ve etkinlik işlemde yeniden oluşturulur)
- Sayfalama kaynağı sayılır, yer tutucular etkinleştirilir ve sayfa düzeni kademeli değildir.
API Değişiklikleri
PagingSource.getRefreshKey()
artık kararlı API'dir (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 almanız gerekiyorsa invalidate yöntemini geçersiz kılmak yerine registerInvalidatedCallback yöntemini çağırabilirsiniz. (I628d9, b/173029013, b/137971356)- Pager artık deneysel API'leri etkinleştirme notasyonu aracılığıyla deneysel olmayan herkese açık API'ye aktarmak yerine, normal kurucularının yanı sıra tek bir deneysel kurucuya sahiptir. (I9dc61, b/174531520)
- Uzaktan güncellemenin uygulandığından emin olmak için
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
veCombinedLoadStates.append
kolaylık özelliklerini, yalnızca arabulucu ve kaynak yükleme durumlarıNotLoading
olduğundaLoading
'tanNotLoading
'a geçiş yapacak şekilde güncellendi. (I65619) LoadParams.pageSize kaldırıldı (desteği sonlandırılmıştı). PagingSource öğeniz için
LoadParams.loadSize
kullanmanızı öneririz.LoadParams.loadSize
,PagingConfig.initialLoadSize
değerine eşit olduğu ilk yükleme çağrısı dışında her zamanPagingConfig.pageSize
değerine eşittir.Paging2 DataSource'nizi Pager veya PagedList kullanmadan test ediyorsanız
initialLoadSize
'yi de ayarlıyorsanızpageSize
,PagingConfig.pageSize
ile eşleşmeyebilir. Testleriniz için önemliyse bunun yerine, DataSource yükleme yöntemleriniz için doğru PageSize değerini dahili olarak ayarlayacak bir Sayfalayıcı/Sayfa Listesi kullanmayı deneyin. (I98ac7, b/149157296)
Hata Düzeltmeleri
- PagingConfig.maxSize ayarlanmışken ayırıcılar kullanıldığında IllegalStateException nedeniyle kilitlenme sorunu düzeltildi. (I0ed33, b/174787528)
- RemoteMediator ayarlanmışsa PREPEND / APPEND için yükleme durumunun ilk yükleme işleminden hemen sonra
NotLoading(endOfPaginationReached = true)
olarak güncellenmemesi sorunu düzeltildi (I8cf5a) - .snapshot(), .peek() gibi sunucu tarafı API'lerin ListUpdateCallback güncellemelerinde önceki (güncel olmayan) listeyi döndürmesine yol açan bir hata düzeltildi.
- RemoteMediator ile kullanıldığında ayırıcı operatörlerin üstbilgi veya altbilgi eklememesi sorunu düzeltildi
- RemoteMediator için LoadState'in NotLoading olarak güncellenmesinin Loading durumunda takılmasına neden olan hata düzeltildi
- Paging2.0 uyumluluk API'si
.asPagingSourceFactory()
'ün, destekleyiciDataSource
'ün yanlış CoroutineDispatcher'da başlatılmasına neden olabileceği bir hata düzeltildi. Bu, özellikle Room'un bu uyumluluk yolunu kullanan mevcut PagingSource uygulamasında kullanıldığında kilitlenme ve olası ANR durumlarını çözer.
Sürüm 3.0.0-alpha10
2 Aralık 2020
androidx.paging:paging-*:3.0.0-alpha10
yayınlanır. 3.0.0-alpha10 sürümü bu taahhütleri içerir.
API Değişiklikleri
Desteği sonlandırılan
dataRefreshFlow
vedataRefreshListener
API'leri, loadStateFlow / Listener güncellemeleriyle alakasız oldukları için kaldırıldı. Taşıma işlemi gerçekleştirenler için loadStateFlow eşdeğeri şudur:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Hata Düzeltmeleri
- RemoteMediator
REFRESH
için endOfPaginationReached artık LoadState güncellemelerine doğru şekilde dağıtılıyor ve uzakAPPEND
ilePREPEND
'nin tetiklenmesini engelliyor. (I94a3f, b/155290248) - Boş ilk sayfa veya yoğun filtreleme nedeniyle boş bir liste sunmak artık Sayfalandırma'nın
PREPEND
veyaAPPEND
yüklemelerini başlatmasını engellemeyecek. (I3e702, b/168169730) - Geçersiz kılma işlemleri hızlı bir şekilde gerçekleştiğinde PagingSource'ın sonraki nesillerinde
getRefreshKey
çağrılmaması sorunu düzeltildi. (I45460, b/170027530)
Harici Katkı
- Yeni bir soyut sınıf olan InvalidatingPagingSourceFactory, yayınladığı tüm PagingSources'a invalidate'ı ileten bir
.invalidate()
API ile eklendi. @claraf3'e teşekkürler. (Ie71fc, b/160716447)
Bilinen Sorunlar
- RemoteMediator b/172254056 kullanılırken .insertSeparators() dönüştürme işleminin üst bilgileri ve alt bilgileri hemen görünmeyebilir
- RemoteMediator'ın kullanılması,
RemoteMediator.load()
b/173717820 değerini döndürmeden önce geçersiz kılma vePagingSource.load(LoadParams.Refresh(...))
tamamlanırsa uzakLoadState
'ün takılmasına neden olabilir.
Sürüm 3.0.0-alpha09
11 Kasım 2020
androidx.paging:paging-*:3.0.0-alpha09
yayınlanır. 3.0.0-alpha09 sürümü bu taahhütleri içerir.
API Değişiklikleri
- replaceWith yan tümcesini kullanarak dataRefreshFlow / Listener yöntemlerinin desteğini tamamen sonlandırın. (I6e2dd)
Hata Düzeltmeleri
- RemoteMediator ile ayırıcılar kullanıldığında
IllegalArgumentException
atılması ve endOfPagination değerini döndürecek uzaktan yükleme işlemi devam ederken geçersiz kılma işleminin tetiklenmesi sorunu düzeltildi (I3a260)
Sürüm 3.0.0-alpha08
28 Ekim 2020
androidx.paging:paging-*:3.0.0-alpha08
yayınlanır. 3.0.0-alpha08 sürümü bu taahhütleri içerir.
API Değişiklikleri
DataSource.InvalidatedCallback
işlevinin Kotlin / Java varyantları, işlevsel arayüz aracılığıyla Kotlin'de SAM dönüşümleri etkinleştirilerek birleştirildi (Kotlin 1.4'te kullanılabilir). Bu, invalidate geri çağırmalarının.map
veya.mapByPage
tarafından dönüştürüldükten sonra kotlin varyantının çağrılmadığı bir hatayı da düzeltir. (I1f244, b/165313046)
Hata Düzeltmeleri
- Sayfalama özelliğinin ViewPager ile etkileşimi önemli ölçüde iyileştirildi. Daha açık belirtmek gerekirse, sayfa geçersizliği nedeniyle sayfalama artık
RemoteMediator#load
çağrısını iptal etmeyecek. Ayrıca, REFRESH isteği başarıyla tamamlanana kadar REFRESH gerekiyorsa artık ek/ön ek yükleme isteği göndermez. (I6390b, b/162252536) - MissingGetterMatchingBuilder için API lint kontrolü, androidx için etkinleştirildi (I4bbea, b/138602561)
.withLoadState*
ConcatAdapter
yardımcılarının, RecyclerView'i arka plan iş parçacığında bildirmesi nedeniyle kilitlenmesi sorunu düzeltildi (I18bb5, b/170988309)- Boş olmayan çok küçük bir sayfanın yüklenmesi durumunda ön yüklemenin bazen yüklemeleri doğru şekilde tetiklememesine neden olan hata düzeltildi.Iffda3 b/169259468
Sürüm 3.0.0-alpha07
1 Ekim 2020
androidx.paging:paging-*:3.0.0-alpha07
yayınlanır. 3.0.0-alpha07 sürümü bu taahhütleri içerir.
API Değişiklikleri
- Artık Guava tabanlı Async PagingData operatörleri, yürütme bağlamını kontrol etmek için parametre olarak bir Executor kabul ediyor. (Id4372)
Hata Düzeltmeleri
- RemoteMediator'da yarış koşulu nedeniyle ortaya çıkan IndexOutOfBounds istisnası düzeltildi. (I00b7f, b/165821814)
- DataSource -> PagingSource dönüşümünde, oluşturulan PagingSource'ın DataSource'den gelen geçersiz kılma sinyallerini yoksaymasına neden olabilecek bir yarış koşulu düzeltildi.
- Sayfa getirme mantıkındaki, bazen PagingDataAdapter.refresh() çağrılana kadar yeni nesil PagingSource'ların alınamamasına neden olan sorun düzeltildi.
- RemoteMediator ile birlikte bir PagingSource'a dönüştürülmüş bir DataSource (ör. Room tarafından üretilen) kullanılırken kaydırma konumunun bazen kaybolmasına neden olan bir sorun düzeltildi
Harici Katkı
- PagingData için RxJava2, RxJava3 ve Guava tabanlı asenkron dönüşüm operatörlerini ekleyen @simonschiller'e teşekkürler.
Sürüm 3.0.0-alpha06
2 Eylül 2020
androidx.paging:paging-*:3.0.0-alpha06
yayınlanır. 3.0.0-alpha06 sürümü bu taahhütleri içerir.
API Değişiklikleri
PagingDataAdapter.setHasStableIds
çağrıldığında sabit kimlikler için destek eksikliğiyle ilgili daha net mesajlar içerenUnsupportedOperationException
atılır. (Ib3890, b/158801427)
Hata Düzeltmeleri
- insertSeparators artık boş sayfaları filtrelemiyor. Bu sayede, çok sayıda boş sayfa eklenmiş olsa bile sunucunun ön besleme mesafesine uyması sağlanıyor. (I9cff6, b/162538908)
Sürüm 3.0.0-alpha05
19 Ağustos 2020
androidx.paging:paging-*:3.0.0-alpha05
yayınlanır. 3.0.0-alpha05 sürümü bu taahhütleri içerir.
Hata Düzeltmeleri
- Sayfalama, sunulan veriler yoğun şekilde filtrelenmiş olsa bile artık sayfaları doğru şekilde önceden alır.
LoadResult.Error
öğesinin yeniden deneme yüklemesine döndürülmesi artık öğe erişimlerinin yanlışlıkla yeniden denemeyi tetiklemesine neden olmuyor
Harici Katkı
- Bazı testleri temizlememize yardımcı olan Cansu 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
yayınlanır. 3.0.0-alpha04 sürümü bu taahhütleri içerir.
API Değişiklikleri
- Sayfa yüklemelerini tetiklemeden sunulan verilere erişime izin vermek için
peek()
API'yiAsyncPagingDataDiffer
vePagingDataAdapter
'ye ekledik. (I38898, b/159104197) - Sayfa getirme işlemini tetiklemeden sunulan öğelerin alınmasına olanak tanımak için
PagingDataAdapter
veAsyncPagingDataDiffer
'ye birsnapshot()
API eklendi. (I566b6, b/159104197) - Statik listelerin sunulmasına olanak tanımak için bir
PagingData.from(List<T>)
kurucu eklendi.Bu kurucu, statik listeleri belirli durumlarda (ör. ilk REFRESH tamamlanmadan önce) göstermek veya dönüşümleri test etmek için genel PagingData akışıyla birleştirilebilir. (Id134d) - dataRefresh Flow / Listener API'leri, REFRESH'te sunulan öğe durumunu göstermek için tasarlandığından kullanımdan kaldırıldı. Ancak loadState Flow / Listener geri çağırma zamanlamasında ve itemCount mülkünde yapılan iyileştirmeler sayesinde bu API'ler artık gereksizdir (Ia19f3)
PagingSource
veRemoteMediator
için RxJava3 uyumluluk sarmalayıcıları eklendi (I49ef3, b/161480176)
Hata Düzeltmeleri
- Room tarafından oluşturulan
PagingSource
dahil olmak üzerePositionalDataSource
,toPagingSourceFactory
yardımcısı aracılığıylaPagingSource
'e dönüştürüldü. Bu öğeler artık atlamayı desteklemek için kendilerini doğru şekilde işaretliyor. (I3e84c, b/162161201) - submitData işlevinin senkronize varyantının kullanılmasının bazen yarışa neden olarak
ClosedSendChannelException
(I4d702, b/160192222) hatasına yol açtığı bir hata düzeltildi
Harici Katkı
- Slack adına RxJava3 uyumluluk sarmalayıcıları ekleyen Zac Sweers'e teşekkürler. (I49ef3, b/161480176)
Sürüm 3.0.0-alpha03
22 Temmuz 2020
androidx.paging:paging-*:3.0.0-alpha03
yayınlanır. 3.0.0-alpha03 sürümü bu taahhütleri içerir.
API Değişiklikleri
- PagingState sınıfının kurucusu artık herkese açıktır. Bu, getRefreshKey() uygulamalarının test edilmesini kolaylaştıracaktır (I8bf15)
- Orijinal ve Kotlin varyantları arasındaki belirsizliği gidermek için DataSource kotlin harita işlevi varyantlarını Java'dan gizledi. (If7b23, b/161150011)
- Kotlin kullanıcılarına kolaylık sağlamak amacıyla tasarlanmış gereksiz API'ler @JvmSynthetic (I56ae5) ile işaretlendi
- LoadResult.Page'in kurucusu için, itemsBefore ve itemsAfter'ı varsayılan olarak COUNT_UNDEFINED olarak ayarlayan aşırı yüklemeler eklendi (I47849)
- Mevcut PagingData operatörlerinin askıya alma yöntemlerini kabul etmesini sağladık ve Java kullanıcıları için askıya almayan yeni mapSync, flatMapSync ve filterSync operatörlerini kullanıma sunduk. Mevcut dönüşüm yöntemleri, uzantı işlevlerine taşındığı için Kotlin kullanıcılarının artık bunları içe aktarması gerekiyor. (I34239, b/159983232)
Hata Düzeltmeleri
- Room (ve PositionalDataSource) PagingSources artık ilk sayfanın bir parçası olarak bir ön ayırıcı gösterecek. Böylece kullanıcının, ayırıcıyı görmek için ekranı kaydırması gerekmeyecek. (I6f747, b/160257628)
- Yer tutucularda yapılan öğ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 tetikler (I95625, b/158763195)
- PagingSource bir hata döndürdükten sonra kaydırmanın bazen PagingDataAdapter.retry() işlevinin yeniden denemesini engelleyebileceğine dair bir hata düzeltildi. (I1084f, b/160194384)
- Bir sayfayı bıraktıktan sonra öğe erişimleri, öğe erişimi prefetchDistance içinde olmasına rağmen sayfaları yükleyememesine neden olan sorun düzeltildi (Ie95ae, b/160038730)
- PagingConfig.maxSize ayarı artık bir bırakma etkinliğinden sonra yer tutucuları etkinleştirmez (I2be29, b/159667766)
Sürüm 3.0.0-alpha02
24 Haziran 2020
androidx.paging:paging-*:3.0.0-alpha02
yayınlanır. 3.0.0-alpha02 sürümü bu taahhütleri içerir.
API Değişiklikleri
PagingConfig
'ün kurucusu için ortak varsayılan değerlerle aşırı yüklemeler eklendi (I39c50, b/158576040)- Ortak varsayılan değerlere sahip
PagingDataAdapter
veAsyncPagingDataDiffer
yapıcıları için aşırı yüklemeler eklendi (Ie91f5) dataRefreshFlow
vedataRefreshListener
adaptör API'leri artık birPagingData
öğ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 ortak öğe erişimi için PagingState'e yardımcılar eklendi (I3b5b6, b/158892717)
Hata Düzeltmeleri
- Sayfalayıcı, geçersiz PagingSource'ların yanlışlıkla yeniden kullanılmasını önlemek için artık PagingSource'ın fabrikada yeniden kullanılıp kullanılmadığını kontrol ediyor. Bu durum, net olmayan bir hata (I99809, b/158486430) veriyordu.
- RemoteMediator REFRESH'ten kaynaklanan hatalar artık PagingSource'ın yüklenmesini engellemiyor (I38b1b, b/158892717)
submitData
'ın askıya alınmayan sürümü,submitData
'ın askıya alınan sürümünden sonra çağrıldığında birden fazlaPagingData
'da eşzamanlı toplama nedeniyle artık kilitlenme yapmıyor. (I26358, b/158048877)- Yapılandırma değişikliğinden sonra ortaya çıkabilecek "sayfalayıcıdan iki kez veri 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
yayınlanır. 3.0.0-alpha01 sürümü bu taahhütleri içerir.
Sayfalama kitaplığı, birkaç önemli yeni özelliği etkinleştirmek için 3.0 sürümüne güncellendi.
3.0 sürümünün yeni özellikleri
- Kotlin coroutine'leri ve Flow için birinci sınıf destek.
- Komut sırası askıya alma işlevleri, RxJava Single veya Guava ListenableFuture ilkelleriyle eşzamansız yükleme desteği.
- Yeniden deneme ve yenileme işlevi 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ğ + veritabanı sayfalandırması
- İptal desteği
- Sunum katmanında yapılan iyileştirmeler
Bilinen Sorunlar
- Paging 3 javadoc'ları henüz kullanıma sunulmamıştır. Bu süre zarfında lütfen yukarıda bağlantısı verilen kılavuzları veya Kotlin belgelerini 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
yayınlanır. 2.1.2 sürümü, 2.1.0 ile ilgili aşağıdaki taahhütleri içerir.
Hata Düzeltmeleri
- Geçersiz kılma sırasında bir konumu dönüştürürken nadiren karşılaşılan
IndexOutOfBoundsException
sorunu düzeltildi.
Sürüm sorunu
2.1.1
sayfalandırma sürümü, yanlış yapılandırılmış bir daldan yanlışlıkla yayınlandı. Bu durum, gelecekteki bir sürümde kullanıma sunulacak kısmen uygulanmış API'leri ve işlevleri açığa çıkardı.Sayfalama
2.1.2
, başlangıçta 2.1.1 sürümünde yayınlanan ancak bu sefer 2.1.0 sürümünün üzerine doğru şekilde eklenen yük merkezileştirme düzeltmesini içerir. Ş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
yayınlanır. 2.1.1 sürümü bu taahhütleri içerir.
Hata düzeltmeleri
- Yer tutucular devre dışı bırakıldığında, PositionalDataSources'dan gelen art arda ilk yüklemeler artık son erişim etrafında merkezlenir
2.1.0 sürümü
2.1.0 sürümü
25 Ocak 2019
2.1.0
sayfası, 2.1.0-rc01
'ten herhangi bir değişiklik olmadan yayınlanır.
Sürüm 2.1.0-rc01
6 Aralık 2018
2.1.0-rc01
sayfası, 2.1.0-beta01
'ten herhangi bir değişiklik olmadan yayınlanır.
Sürüm 2.1.0-beta01
1 Kasım 2018
2.1.0-beta01
sayfası, 2.1.0-alpha01
'ten herhangi bir değişiklik olmadan yayınlanır.
Sürüm 2.1.0-alpha01
12 Ekim 2018
Sayfalandırma 2.1.0-alpha01
özelliğine, sayfa bırakma ve her yapı için KTX uzantı kitaplıkları gibi iki önemli eklemenin yanı sıra diğer API değişiklikleri ve hata düzeltmeleri de eklendi.
API Değişiklikleri
- Bellekte yüklenen öğelerin sayısını sınırlamak için
PagedList.Config.Builder.setMaxSize()
eklendi. PagedList.Config.Builder
için Kotlin alternatifi olarakandroidx.paging.Config()
eklendiPagedList.Builder
için Kotlin alternatifi olarakandroidx.paging.PagedList()
eklendiLivePagedListBuilder
için Kotlin alternatifi olarakDataSourceFactory.toLiveData()
eklendiRxPagedListBuilder
için Kotlin alternatifleri olarakDataSourceFactory.toObservable()
vetoFlowable()
eklendi- PagedList değiştirildiğinde dinlemek için
AsyncPagedListDiffer.addPagedListListener()
eklendi. b/111698609 - Eski ve yeni listeyi ileten
PagedListAdapter.onCurrentListChanged()
varyantı eklendi, önceki varyantın desteği sonlandırıldı. - Fark karşılaştırması yapıldıktan sonra sayfalı liste görüntülendiğinde/gösterilirse ek bir geri çağırma işlevi alan
PagedListAdapter/AsyncPagedListDiffer.submitList()
varyantları eklendi. Bu sayede, PagedList takaslarını diğer kullanıcı arayüzü güncellemeleriyle senkronize edebilirsiniz. b/73781068 - Bellekte kaç öğe olduğunu size bildirmek için
PagedList.getLoadedCount()
eklendi. Yer tutucular devre dışıysa döndürülen değerin her zaman.size()
değerine eşit olduğunu unutmayın.
Hata Düzeltmeleri
- Listeler yeniden kullanıldığında karşılaştırma yapılırken ortaya çıkan bir yarış koşulu düzeltildi b/111591017
PagedList.loadAround()
, dizin geçersiz olduğunda artıkIndexOutOfBoundsException
hatası veriyor. Daha önce, net olmayan başka bir istisnayla kilitlenebiliyordu.- Değişmeyen verilerle birlikte son derece küçük bir ilk yükleme boyutunun daha fazla yükleme yapılmamasına neden olduğu bir durum 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 ortaya çıkabilecek kilitlenme sorunu düzeltildi b/114635383.
Sürüm 2.0.0-beta01
2 Temmuz 2018
Hata Düzeltmeleri
- Bazı ön ek durumlarda içeriğin kaybolması düzeltildi (yer tutucular devre dışı, PositionalDataSource) b/80149146
- (
1.0.1
sürümünde kullanıma sunulmuştur.)PagedListAdapter
veAsyncPagedListDiffer
'nin etkinliklerin taşındığını bildiremediği kilitlenmeler düzeltildi. b/110711937
AndroidX öncesi bağımlılıklar
Aşağıdaki Paging'in AndroidX öncesi sürümleri için aşağıdaki 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"
}
1.0.1 sürümü
1.0.1 sürümü
26 Haziran 2018
Sayfalandırma 1.0.1
, runtime
sürümünde tek bir hata düzeltmesiyle yayınlanır. 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ıdır.
Hata Düzeltmeleri
PagedListAdapter
veAsyncPagedListDiffer
'ın taşıma etkinliklerini sinyallemede başarısız olduğu kilitlenmeler düzeltildi. b/110711937
RxJava2 1.0.0 sürümü
RxJava2 Sürüm 1.0.0-rc1
16 Mayıs 2018
Sayfalandırma RxJava2 1.0.0-rc1
, ilk alfa sürümünden herhangi bir değişiklik olmadan 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ı
Sayfalandırma 1.0.0
sürümü için bilinen başka bir sorun veya planlanmış yeni özellik 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 sürümü zorlu testlerden geçirmemize yardımcı olun.
Bu sürümde herhangi bir değişiklik yoktur. 1.0.0-beta1
ile aynıdır.
Sürüm 1.0.0-beta1
5 Nisan 2018
Sayfalama, yayınlanmaya hazır sürüme geçmeden önce kısa bir süre beta sürümünde olacaktır.
Paging 1.0
için başka API değişiklikleri planlamıyoruz ve API değişiklikleri için çıta çok yüksek.
Sayfalandırma için Alpha 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ı sürüm olarak sunulur.
Bu yeni kitaplık, Executor
yerine Scheduler
alarak Observable
ve Flowable
oluşturabilen LivePagedListBuilder
için bir RxJava2 alternatifi sunar:
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ıları 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
'te)setMainThreadExecutor()
,setNotifyExecutor()
olarak yeniden adlandırıldı (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ükünü tetikler.Dahili
DataSource
sarmalayıcılarındaki geçersiz kılma davranışı düzeltildi (DataSource.map
'u ve yer tutucusu devre dışı bırakılmışPositionalDataSource
yüklemeyi 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 yayınlanır. Sayfalama 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.
Sayfalandırma alpha7
sürümünün, Sayfalandırma beta sürümüne geçmeden önceki son sürüm olması planlanmaktadır.
API Değişiklikleri
DataSource.LoadParams
nesneleri artık herkese açık bir kurucuya sahip veDataSource.LoadCallback
nesneleri soyut hale geldi. Bu sayede,DataSource
sarmalanabilir veyaDataSource
doğrudan sahte geri çağırma ile test edilebilir. 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şlem için de aynı işlevi sağlar (ör. SQL'den yüklenen öğelerin ayrıca ayrı bir veritabanını sorgulamasının gerekiyorsa bu işlem toplu olarak yapılabilir).
PagedList#getDataSource()
, kolaylık yöntemi olarak eklendi b/72611341recyclerview.extensions
paketinin veLivePagedListProvider
'ın kalanları da dahil olmak üzere kullanımdan kaldırılan tüm sınıflar API'den kaldırıldı.- Harita işlevini etkinleştirmek için
DataSource.Factory
bir arayüzden soyut sınıfa değiştirilir.
Hata Düzeltmeleri
- İnşaatçılar'ı nihai olarak değiştirdi. b/70848565
- Oda
DataSource
uygulaması artık çok tablolu sorguları işleyecek şekilde düzeltildi. Bu düzeltme, Oda 1.1.0-beta1 sürümünde yer almaktadır. Yukarıya bakın. - Yer tutucular etkinse ve toplam boyut sayfa boyutunun tam katıysa
BoundaryCallback.onItemAtEndLoaded
işlevininPositionalDataSource
için çağrılmadığı bir hata düzeltildi.
Sürüm 1.0.0-alpha5
22 Ocak 2018
Hata Düzeltmeleri
- Yer tutucular devre dışıyken sayfa yükleme sorununu düzeltme b/70573345
- IllegalArgumentException hatasını b/70360195 (ve spekülatif oda tarafı düzeltmesi) izlemek için ek günlük kaydı
- Javadoc örnek kodu düzeltmeleri b/70411933, b/71467637