Sayfa ayırma

Sayfalama kitaplığı, uygulamanızın RecyclerView'ine verileri kademeli ve sorunsuz bir şekilde yüklemenizi kolaylaştırır.

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 - - -
Bu kitaplık en son 13 Kasım 2024'te güncellenmiştir.

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:

Eski

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.

Yeni sorun oluşturma

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 ve paging-testing, yeni Kotlin çok platformlu hedefleri ekledi: watchos, tvos ve linuxArm64 (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 veya RecyclerView ile kullanılan PagingDataAdapter gibi bu API'lerin daha fazla yükleme tetikleyemediği sorun düzeltildi. (I60ca5, b/352586078)
  • PagingDataAdapter veya AsyncPagingDataDiffer kullanarak bir RecyclerView'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 veya paging-runtime'un AsyncPagingDataDiffer'si yerine PagingDataPresenter üzerine inşa edebilirsiniz.
  • LoadStates'nin sırasıyla Hata veya NotLoading durumunda olup olmadığını kontrol etmek için hasError ve isIdle'e yeni LoadStates ve CombinedLoadStates yardımcı yöntemleri eklendi. Ayrıca Flow<CombinedLoadStates> üzerinde, yükün NotLoading veya Hata durumuna gelene kadar bekleyen yeni bir awaitNotLoading() Kotlin uzantı yöntemi eklendi.
  • PagingData.empty(), oluşturucusuna özel LoadStates iletilmediği sürece artık varsayılan olarak NotLoading durumlarını dağıtır. Bu, PagingDataAdapter'a gönderildiğinde LoadStates'ü dağıtmayan veya LazyPagingItems 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'lerini common'e taşıdı ve artık Android'e ek olarak jvm ve iOS ile uyumlu.
  • paging-testing, kodunu common'e taşıdı ve artık Android'e ek olarak jvm ve iOS ile uyumlu.
  • paging-compose, kodunu common'a taşıdı ve androidx.compose'nin çok platformlu desteğine uygun bir Android yapısını kullanıma sundu.
  • paging-runtime, paging-guava, paging-rxjava2 ve paging-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 veya paging-runtime'un AsyncPagingDataDiffer'si yerine PagingDataPresenter üzerine inşa edebilirsiniz. (Id1f74, b/315214786)
  • LoadStates değerinin Hata veya NotLoading durumunda olup olmadığını kontrol etmek için yeni LoadStates ve CombinedLoadStates yardımcı yöntemleri eklendi. Ayrıca, yükleme NotLoading veya Hata durumuna gelene kadar LoadStateFlow üzerinde bekleyen yeni bir API eklendi. (Id6c67)

Davranış değişikliği

  • PagingData.empty(), oluşturucusuna özel LoadStates iletilmediği sürece artık varsayılan olarak NotLoading durumlarını dağıtır. Bu, PagingDataAdapter'a gönderildiğinde LoadStates'ü dağıtmayan veya LazyPagingItems 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'lerini common'e taşıdı ve artık Android'e ek olarak jvm ve iOS ile uyumlu.
  • paging-testing, kodunu common'e taşıdı ve artık Android'e ek olarak jvm ve iOS ile uyumlu.
  • paging-compose, kodunu common'a taşıdı ve androidx.compose'nin çok platformlu desteğine uygun bir Android yapısını kullanıma sundu.
  • paging-runtime, paging-guava, paging-rxjava2 ve paging-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ı

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çin 3.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ğlayan PagingData.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 bu PagingData'yi bir MutableStateFlow (ö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 ve HorizontalPager gibi tüm gecikmeli düzenler ve Wear ile TV kitaplıklarındaki özel gecikmeli bileşenler için destek. Bu, 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ı olan yeni alt düzey LazyPagingItems uzantı yöntemleri itemKey ve itemContentType sayesinde sağlandı.
    • Yalnızca LazyListScope'yi destekleyen items(lazyPagingItems) ve itemsIndexed(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 özel PagingSource 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 statik List<Value>'yi testlerde bir Sayfalayıcı'ya iletilebilecek PagingSourceFactory'e dönüştüren asPagingSourceFactory API'leri
    • Flow<PagingData<Value>> üzerinde asSnapshot Kotlin uzantısı, Flow<PagingData<Value>>'ı doğrudan List<Value> olarak çevirir. asSnapshot lambda, scrollTo veya appendScrollWhile 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 ve DEBUG) 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 ve AsyncPagingDataDiffer için CoroutineDispatcher yerine CoroutineContext kabul eden yapıcılar eklendi.
  • Önceki () -> PagingSource lambda'larından daha net bir API yüzeyi sağlayan yeni bir PagingSourceFactory 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

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 bir PagingSourceFactory işlevsel arayüz eklendi. Bu fabrika, bir Pager ö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çin List<Value>.asPagingSourceFactory()'a yeni paging-testing API eklendi. Birden fazla statik veri nesliyle test yapmak için Flow<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ık CoroutineScope iletilmesi gerekmez. Artık varsayılan olarak üst kapsamından devralınan bağlamı kullanır. (Id0a78, b/282240990)
  • TestPager kurucu parametreleri, gerçek Pager 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ık loadOperations 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 iletmeden asSnapshot çağrılabilir. (Ied354, b/277233770)

Belgelerde Yapılan İyileştirmeler

  • asPagingSourceFactory() ile ilgili dokümanları, Flow üzerinde PagingSource ö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 ve itemsAfter'nin geçersiz kılınması gerektiğini açıklığa kavuşturmak amacıyla LoadResult.Pageyapıcıyla ilgili dokümanlar güncellendi. (Ied354)

Harici Katkılar

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 bir Flow<List<Value>>'ten pagingSourceFactory oluşturmak için bir asPagingSourceFactory yöntemi içeriyor. Bu yöntem, bir sayfalayıcıya sağlanır. Akıştan yayınlanan her List<Value>>, sayfalı veri oluşumunu temsil eder. Bu, sayfalayıcının toplayacağı bir veri kaynağı taklit ederek PagingData 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 bir Flow<PagingData<T>> öğesinin çıktısını doğrulamak için kullanılabilir.

    Bu işlem, Flow<PagingData<Value>>'daki asSnapshot Kotlin uzantısı aracılığıyla yapılır. Bu uzantı, Flow<PagingData<Value>>'ı doğrudan List<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çin scrollTo veya appendScrollWhile 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 bir suspend 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 ve PagingDataAdapter'daki getItem ve peek 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 ile LoadResult.Page.iterator() arasında kolay iterasyon sağlar. Bu, PagingState nesnesinin pages özelliği PagingSource.getRefreshKey yöntemine aktarıldığında olduğu gibi bir List<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çin AsyncPagingDataDiffer veya PagingDataAdapter sınıfları aracılığıyla günlükler sağlıyor.
  • Günlükler, adb shell komutu adb 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 eksik PagingDataDiffer 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 ve AsyncPagingDataDiffer için CoroutineDispatcher yerine CoroutineContext kabul eden yapıcılar eklendi. (Idc878)
  • Varsayılan olarak PagingData.from() ve PagingData.empty() artık sunucu tarafındaki CombinedLoadStates'yi etkilemeyecektir. LoadStates'yi tamamen terminal (yani,sourceLoadStatesremoteLoadStates NotLoading(endOfPaginationReached = false)) seçebilirsiniz. Gerekirse uzak eyaletleri de dahil etme seçeneğiniz vardır. LoadStates iletilmezse statik PagingData alındığında sunucu tarafında önceki CombinedLoadStates korunur. (Ic3ce5, b/205344028)

Hata Düzeltmeleri

  • PagingSource.getRefreshKey() sonucu, artık boş değer döndüreceği durumlarda initialKey'a göre doğru şekilde önceliklendiriliyor ancak boş olmayan bir initialKey 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 ara LoadState.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 gereksiz LoadState.NotLoading etkinliklerini kaldırarak LoadState 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 ve Flow<PagingData>.flowable API'leri artık deneysel değil
  • Davranış LoadState olarak değişir:
    • endOfPaginationReached artık hem PagingSource hem de RemoteMediator için LoadType.REFRESH için her zaman false değerini alır.
    • Sayfalama'dan gelen LoadStates, yayını aşağı akışa göndermeden önce artık hem PagingSource hem de RemoteMediator'den geçerli değerler bekler. Yeni nesil PagingData'ler artık bazı durumlarda yanlışlıkla NotLoading olarak sıfırlanmak yerine yenileme durumu için her zaman doğru şekilde Loading ile başlayacak.
    • Sunucu API'lerindeki .loadStateFlow ve .addLoadStateListener artık her zaman arabulucu durumlarının null olarak ayarlandığı ilk bir CombinedLoadStates 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 bu PagingSource 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 ve Flow<PagingData>.flowable API'leri artık deneysel değildir. (Ie0bdd)

Hata Düzeltmeleri

  • LoadStates için endOfPaginationReached, LoadType.REFRESH için artık her zaman false değerini alır. Daha önce, endOfPaginationReached değerinin RemoteMediator REFRESH için true 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 zaman false 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ın null ve kaynak durumlarının NotLoading(endOfPaginationReached = false) olarak ayarlandığı ilk bir CombinedLoadStates göndermiyor. Bunun anlamı:

    1. RemoteMediator'ı kullanıyorsanız mediator durumları her zaman doldurulur.
    2. .loadStateFlow üzerinde yeni bir loadState dinleyicisi veya toplayıcısı kaydettiğinizde, PagingData'den gerçek bir CombinedLoadStates almamışsa artık mevcut değer hemen yayınlanmaz. Bu durum, bir toplayıcı veya dinleyici PagingData 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ık androidx.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 bu PagingData'yi bir MutableStateFlow içine sarmalayarak (ör. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Bu verileri @Preview'unuza giriş olarak kullanarak collectAsLazyPagingItems() çağrıları önizlenebilir LazyPagingItems sağlar. (I8a78d, b/194544557)

Hata Düzeltmeleri

  • pager.flow.cachedIn'ten LazyPagingItems'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'deki items ve itemsIndexed uzantı işlevleri artık yeni API'lerdeki desteği yansıtan bir contentType 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

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 komutu adb 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 eksik PagingDataDiffer 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 ve AsyncPagingDataDiffer için CoroutineDispatcher yerine CoroutineContext kabul eden yapıcılar eklendi. (Idc878)

Hata Düzeltmeleri

  • LazyPagingItems artık ilk loadState öğesini LoadState.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ılan items(lazyPagingItems) ve itemsIndexed(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 yerine lazyPagingItems[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ızca 1.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 ve CombinedLoadStates.append kolaylık özelliklerini, yalnızca arabulucu ve kaynak yükleme durumları NotLoading olduğunda Loading'tan NotLoading'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öntemleri LazyPagingItem'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 veya RxPagedList tarafından üretilen ilk değerden PagedList.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ığında DataSource.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 zaman null 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 bazen IndexOutOfBoundsException: Inconsistency detected hatası oluşması düzeltildi
  • Uyumluluk yolları üzerinden kullanıldığında DataSource'nin başlatılması sırasındaki isInvalid çağrısı artık ana iş parçacığı yerine fetchDispatcher'da doğru şekilde başlatılıyor. Bu, Room'un PagingSource uygulaması kullanılırken ana iş parçacığında Db erişimi nedeniyle oluşan bir IllegalStateException 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ızca null döndürür. Ancak getRefreshKey(), 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ın PagingState.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ında RemoteMediator.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 ve CombinedLoadStates.append kolaylık özelliklerini, yalnızca arabulucu ve kaynak yükleme durumları NotLoading olduğunda Loading'tan NotLoading'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 zaman PagingConfig.pageSize değerine eşittir.

    Paging2 DataSource'nizi Pager veya PagedList kullanmadan test ediyorsanız initialLoadSize'yi de ayarlıyorsanız pageSize, 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, destekleyici DataSource'ü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 ve dataRefreshListener 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 }
    

    (Ib5570, b/173530908)

Hata Düzeltmeleri

  • RemoteMediator REFRESH için endOfPaginationReached artık LoadState güncellemelerine doğru şekilde dağıtılıyor ve uzak APPEND ile PREPEND'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 veya APPEND 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 ve PagingSource.load(LoadParams.Refresh(...)) tamamlanırsa uzak LoadState'ü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çeren UnsupportedOperationException 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'yi AsyncPagingDataDiffer ve PagingDataAdapter'ye ekledik. (I38898, b/159104197)
  • Sayfa getirme işlemini tetiklemeden sunulan öğelerin alınmasına olanak tanımak için PagingDataAdapter ve AsyncPagingDataDiffer'ye bir snapshot() 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 ve RemoteMediator için RxJava3 uyumluluk sarmalayıcıları eklendi (I49ef3, b/161480176)

Hata Düzeltmeleri

  • Room tarafından oluşturulan PagingSource dahil olmak üzere PositionalDataSource, toPagingSourceFactory yardımcısı aracılığıyla PagingSource'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 ve AsyncPagingDataDiffer yapıcıları için aşırı yüklemeler eklendi (Ie91f5)
  • dataRefreshFlow ve dataRefreshListener adaptör API'leri artık bir PagingData öğ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() ve firstItemOrNull() 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 fazla PagingData'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

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 olarak androidx.paging.Config() eklendi
  • PagedList.Builder için Kotlin alternatifi olarak androidx.paging.PagedList() eklendi
  • LivePagedListBuilder için Kotlin alternatifi olarak DataSourceFactory.toLiveData() eklendi
  • RxPagedListBuilder için Kotlin alternatifleri olarak DataSourceFactory.toObservable() ve toFlowable() 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ık IndexOutOfBoundsException 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 ve AsyncPagedListDiffer'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 ve AsyncPagedListDiffer'ı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, yeni android.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 ve LivePagedListBuilder'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 ilk PagedList 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 ve DataSource.LoadCallback nesneleri soyut hale geldi. Bu sayede, DataSource sarmalanabilir veya DataSource 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/72611341
  • recyclerview.extensions paketinin ve LivePagedListProvider'ı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şlevinin PositionalDataSource 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