Sayfalama

Paging Library, uygulamanızın RecyclerView'sinde verileri kademeli ve sorunsuz bir şekilde yüklemenizi kolaylaştırır.

Bu tabloda, androidx.paging grubundaki tüm yapılar listelenir.

Yapı Kararlı sürüm Sürüm Adayı Beta Sürümü Alfa sürümü
paging-* 3.3.6 - - 3.4.0-alpha01
paging-compose 3.3.6 - - 3.4.0-alpha01
Bu kitaplık en son 2 Temmuz 2025'te güncellenmiştir.

Bağımlılıkları bildirme

Paging'e bağımlılık eklemek için Google Maven deposunu projenize eklemeniz gerekir. Daha fazla bilgi için Google'ın Maven deposunu okuyun.

Uygulamanız veya modülünüz için build.gradle dosyasına ihtiyacınız olan yapılarla ilgili bağımlılıkları ekleyin:

Groovy

dependencies {
  def paging_version = "3.3.6"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - RxJava3 support
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // optional - Jetpack Compose integration
  implementation "androidx.paging:paging-compose:3.4.0-alpha01"
}

Kotlin

dependencies {
  val paging_version = "3.3.6"

  implementation("androidx.paging:paging-runtime:$paging_version")

  // alternatively - without Android dependencies for tests
  testImplementation("androidx.paging:paging-common:$paging_version")

  // optional - RxJava2 support
  implementation("androidx.paging:paging-rxjava2:$paging_version")

  // optional - RxJava3 support
  implementation("androidx.paging:paging-rxjava3:$paging_version")

  // optional - Guava ListenableFuture support
  implementation("androidx.paging:paging-guava:$paging_version")

  // optional - Jetpack Compose integration
  implementation("androidx.paging:paging-compose:3.4.0-alpha01")
}

Kotlin uzantılarını kullanma hakkında bilgi edinmek için ktx dokümanlarını inceleyin.

Bağımlılıklar hakkında daha fazla bilgi için Derleme Bağımlılıkları Ekleme başlıklı makaleyi inceleyin.

Geri bildirim

Geri bildiriminiz Jetpack'in iyileştirilmesine yardımcı olur. Yeni sorunlar keşfederseniz veya bu kitaplığı iyileştirmeye yönelik fikirleriniz olursa lütfen bize bildirin. Yeni bir sorun oluşturmadan önce lütfen bu kitaplıktaki mevcut sorunlara göz atın. Yıldız düğmesini tıklayarak mevcut bir soruna oyunuzu ekleyebilirsiniz.

Yeni sorun oluşturma

Daha fazla bilgi için Sorun İzleyici belgelerini inceleyin.

Sürüm 3.4

Sürüm 3.4.0-alpha01

2 Temmuz 2025

androidx.paging:paging-*:3.4.0-alpha01 iptal edilir. 3.4.0-alpha01 sürümü bu commit'leri içerir.

Yeni Özellikler

Hata Düzeltmeleri

  • Paging 3.3 veya sonraki sürümlerden çekilen Android birim testleri artık PagingLogger'dan (Ia9400, b/331684448) hata vermeyecek.
  • Kullanıcı RecyclerView güncellenirken kaydırdığında RecyclerView öğesinin IndexOutOfBoundsException oluşturmasına neden olan hata düzeltildi (Id1f16, b/381024738)
  • Kaydırma sırasında yenileme yapılırken sayfalama işleminin daha fazla yükleme tetikleyememesine neden olan hata düzeltildi. (I60ca5, b/352586078)
  • Sayfalama öğeleri yenilenirken kaydırma yapıldığında kilitlenme sorunu düzeltildi. (I8c65a, b/347649763)

Sürüm 3.3

Sürüm 3.3.6

12 Şubat 2025

androidx.paging:paging-*:3.3.6 iptal edilir. 3.3.6 sürümü bu commit'leri içerir.

Hata Düzeltmeleri

  • İlk yenileme sırasında gönderilen yenileme ve yeniden deneme sinyalleri artık depolanacak ve Paging presenter hazır olduğunda otomatik olarak yeniden gönderilecek.

Harici Katkı (External Contribution)

  • Hata düzeltmeyi (#754) gönderdiği için Eva'ya teşekkür ederiz.

Sürüm 3.3.5

11 Aralık 2024

androidx.paging:paging-*:3.3.5 iptal edilir. 3.3.5 sürümü bu commit'leri içerir.

Hata Düzeltmeleri

  • Kullanıcı RecyclerView güncellenirken kaydırdığında RecyclerView öğesinin IndexOutOfBoundsException hatası vermesine neden olan hata düzeltildi. (Id1f16, b/381024738)

Sürüm 3.3.4

13 Kasım 2024

androidx.paging:paging-*:3.3.4 iptal edilir. 3.3.4 sürümü bu commit'leri içerir.

Hata Düzeltmeleri

  • Paging 3.3 veya sonraki sürümleri kullanan Android birim testleri artık Method isLoggable in android.util.Log not mocked gibi bir hata vermeyecek. (Ia9400, b/331684448)

Sürüm 3.3.2

7 Ağustos 2024

androidx.paging:paging-*:3.3.2 iptal edilir. 3.3.2 sürümü bu commit'leri içerir.

Yeni Özellikler

  • paging-common ve paging-testing, watchos, tvos ve linuxArm64 olmak üzere yeni Kotlin Multiplatform hedefleri ekledi. (90c9768), (53e0eca)

Sürüm 3.3.1

24 Temmuz 2024

androidx.paging:paging-*:3.3.1 iptal edilir. 3.3.1 sürümü bu commit'leri içerir.

Hata Düzeltmeleri

  • AsyncPagingDataDiffer veya RecyclerView ile kullanılan PagingDataAdapter gibi üzerine kurulu API'lerin, kaydırma sırasında destekleyen veri kaynağı yenilendiğinde daha fazla yükleme tetikleyememesine neden olan sorun düzeltildi. (I60ca5, b/352586078)
  • PagingDataAdapter veya AsyncPagingDataDiffer kullanılarak RecyclerView kaydırılırken öğeler destekleyen veri kaynağından kaldırıldığında meydana gelen kilitlenme sorunu düzeltildi. (I8c65a, b/347649763)

3.3.0 sürümü

14 Mayıs 2024

androidx.paging:paging-*:3.3.0 iptal edilir. 3.3.0 sürümü bu commit'leri içerir.

3.2.0 sürümünden beri yapılan önemli değişiklikler

  • PagingDataPresenter artık herkese açık bir sınıf. Çok platformlu sunucular artık dahili sayfalama API'leri veya paging-runtime'nin AsyncPagingDataDiffer'sini gerektirmek yerine PagingDataPresenter üzerine kurulabilir.
  • LoadStates ve CombinedLoadStates adlı yeni yardımcı yöntemler hasError ve isIdle'ye eklendi. Bu yöntemler, sırasıyla LoadStates'nın hata veya NotLoading durumunda olup olmadığını kontrol eder. Ayrıca, yükleme işlemi NotLoading veya hata durumuna yerleşene kadar bekleyen awaitNotLoading() Kotlin uzantısı yöntemi de eklendi.Flow<CombinedLoadStates>
  • PagingData.empty(), oluşturucusuna özel LoadStates geçirilmediği sürece artık varsayılan olarak NotLoading durumlarını gönderir. Bu, PagingDataAdapter öğesine gönderildiğinde LoadStates öğesinin gönderilmediği veya LazyPagingItems olarak toplandığında yükleme durumlarının gönderildiği mevcut davranıştan farklıdır. LazyPagingItems olarak toplandığında, ilk oluşturma işleminden hemen sonra boş bir liste de gösterilir.

Kotlin Multiplatform Uyumluluğu

Paging artık Kotlin Multiplatform ile uyumlu yapılar sunuyor. Bu, büyük ölçüde CashApp'in multiplatform-paging projesinden gelen upstream çalışmalarından kaynaklanıyor.

  • paging-common, tüm Paging 3 API'lerini common'ye taşıdı ve artık Android'in yanı sıra jvm ve iOS ile de uyumlu.
  • paging-testing, kodunu common'ye taşıdı ve artık Android'in yanı sıra jvm ve iOS ile de uyumlu.
  • paging-compose, kodunu common'ye taşıdı ve androidx.compose'nin çoklu platform desteğine uygun bir Android yapısı gönderiyor.
  • 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, Paging 3.3.0-beta01'de herhangi bir değişiklik yapılmadan yayınlandı. 3.3.0-rc01 sürümü bu commit'leri içerir.

Sürüm 3.3.0-beta01

3 Nisan 2024

androidx.paging:paging-*:3.3.0-beta01 sürümünde önemli bir değişiklik yok. 3.3.0-beta01 sürümü bu commit'leri içerir.

Sürüm 3.3.0-alpha05

20 Mart 2024

androidx.paging:paging-*:3.3.0-alpha05 iptal edilir. 3.3.0-alpha05 sürümü bu commit'leri içerir.

API Değişiklikleri

  • Sayfalama artık ortak kod için AndroidX Annotation @MainThread ek açıklamasını kullanıyor. (I78f0d, b/327682438)

Sürüm 3.3.0-alpha04

6 Mart 2024

androidx.paging:paging-*:3.3.0-alpha04 iptal edilir. 3.3.0-alpha04 sürümü bu commit'leri içerir.

Hata Düzeltmeleri

  • Kotlin çok platformlu uyumluluğunun eklenmesiyle ilgili küçük doküman hataları düzeltildi. (aosp/2950785)

Sürüm 3.3.0-alpha03

7 Şubat 2024

androidx.paging:paging-*:3.3.0-alpha03 iptal edilir. 3.3.0-alpha03 sürümünde şu commit'ler yer alıyor.

Yeni Özellikler

  • PagingDataPresenter artık herkese açık bir sınıf. Çok platformlu sunucular artık dahili sayfalama API'leri veya paging-runtime'nin AsyncPagingDataDiffer'sini gerektirmek yerine PagingDataPresenter üzerine kurulabilir. (Id1f74, b/315214786)
  • LoadStates öğesinin Error (Hata) veya NotLoading durumunda olup olmadığını kontrol etmek için yeni LoadStates ve CombinedLoadStates yardımcı yöntemleri eklendi. Ayrıca, yük NotLoading veya hata durumuna yerleşene kadar LoadStateFlow üzerinde bekleyen yeni bir API eklendi. (Id6c67)

Davranış değişikliği

  • PagingData.empty(), oluşturucusuna özel LoadStates geçirilmediği sürece artık varsayılan olarak NotLoading durumlarını gönderir. Bu, PagingDataAdapter öğesine gönderildiğinde LoadStates öğesinin gönderilmediği veya LazyPagingItems olarak toplandığında yükleme durumlarının gönderildiği mevcut davranıştan farklıdır. LazyPagingItems olarak toplandığında, ilk oluşturma işleminden hemen sonra boş bir liste de gösterilir. (I4d11d, b/301833847)

Sürüm 3.3.0-alpha02

20 Eylül 2023

androidx.paging:paging-*:3.3.0-alpha02 iptal edilir. 3.3.0-alpha02 sürümünde şu commit'ler yer alıyor.

Kotlin Multiplatform Uyumluluğu

Paging artık Kotlin Multiplatform ile uyumlu yapılar sunuyor. Bu, büyük ölçüde CashApp'in multiplatform-paging projesinden gelen upstream çalışmalarından kaynaklanıyor. Bu sayede iki depo arasındaki farklılaşmayı önleyebilir ve depoları uyumlu tutabiliriz.

  • paging-common, tüm Paging 3 API'lerini common'ye taşıdı ve artık Android'in yanı sıra jvm ve iOS ile de uyumlu.
  • paging-testing, kodunu common'ye taşıdı ve artık Android'in yanı sıra jvm ve iOS ile de uyumlu.
  • paging-compose, kodunu common'ye taşıdı ve androidx.compose'nin çoklu platform desteğine uygun bir Android yapısı gönderiyor.
  • 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 tasarlanan herkese açık Logger arayüzünün desteği sonlandırıldı (I16e95, b/288623117).

Harici Katkı (External Contribution)

Sürüm 3.3.0-alpha01

20 Eylül 2023

  • Bu, androidx.paging kitaplıklarının ilk çok platformlu sürümüdür. Bu sürümde yalnızca *-jvm ve *-android yapıtları var. macOS, iOS ve Linux varyantları için 3.3.0-alpha02 kullanın.

Sürüm 3.2

Sürüm 3.2.1

6 Eylül 2023

androidx.paging:paging-*:3.2.1 iptal edilir. 3.2.1 sürümü şu commit'leri içerir.

Hata Düzeltmeleri

  • asSnapshot(), yükleme işleminin ne zaman tamamlandığıyla ilgili herhangi bir bilgiye sahip olmadığından (PagingData.from(List, LoadStates) aşırı yüklemesinden farklı olarak) PagingData.from(List) kullanılarak oluşturulan bir Akış geçirildiğinde Paging Testing yapay nesnesinin asSnapshot() API'sinin askıda kalmasına neden olan sorun düzeltildi. Bu geçici çözüm yalnızca tamamlanabilir akışlarda (ör. flowOf(PagingData.from(...))) işe yarar. Tamamlanamayan akışlarda (ör. MutableStateFlow, LoadStates sağlayan PagingData.from aşırı yükünü kullanın. (I502c3)
  • Paging Compose, yükleme tamamlandığında yeni verilerin aynı çerçevede kullanılabilmesini sağlamak için artık dahili olarak AndroidUiDispatcher.Main kullanıyor. (Ia55af)

Sürüm 3.2.0

26 Temmuz 2023

androidx.paging:paging-*:3.2.0 iptal edilir. 3.2.0 sürümü şu commit'leri içerir.

3.1.0 sürümünden beri yapılan önemli değişiklikler

  • Paging Compose, API kararlılığına ulaştı ve Paging'in geri kalanıyla birleştirildi. Artık sürümü diğer tüm Paging yapılarıyla eşleşiyor. 3.1.0 sürümünden beri yapılan değişiklikler:
    • PagingData.from(fakeData) oluşturup bu PagingData öğesini MutableStateFlow içine sarmalayarak (ör. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) sahte verilerin listesini önizleme desteği. Önizlemek için bu akışı collectAsLazyPagingItems() alıcısı olarak @Preview composable'larına iletin.
    • LazyVerticalGrid ve HorizontalPager gibi tüm geç yüklenen düzenlerin yanı sıra Wear ve TV kitaplıklarındaki özel geç yüklenen bileşenler için destek. Bu, LazyPagingItems, itemKey ve itemContentType gibi yeni alt düzey uzantı yöntemleriyle elde edildi. Bu yöntemler, key ve contentType parametrelerini LazyColumn, LazyVerticalGrid için mevcut olan standart items API'lerine ve HorizontalPager gibi API'lerdeki eşdeğerlerine uygulamanıza yardımcı olur.
    • Yalnızca LazyListScope'ı destekleyen items(lazyPagingItems) ve itemsIndexed(lazyPagingItems) kullanımdan kaldırıldı.
  • Uygulamanızın her katmanının birim testi ve Paging ile entegrasyonu için ayrı ayrı tasarlanmış API'ler sağlayan yeni paging-testing yapısı. Örneğin, şunları içerir:
    • Kendi özel PagingSource uygulamanızın davranışını Pager'dan ve gerçek kullanıcı arayüzünden bağımsız olarak doğrulamanıza olanak tanıyan TestPager sınıfı.
    • ​​asPagingSourceFactory Flow<List<Value>> veya statik List<Value> öğesini testlerde Pager'a iletilebilecek bir PagingSourceFactory öğesine dönüştürmek için API'ler
    • asSnapshot Kotlin uzantısı, Flow<PagingData<Value>> dilini doğrudan List<Value> diline çevirir.Flow<PagingData<Value>> 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, verilerin anlık görüntüsünün, sayfalandırılmış verilerinizin herhangi bir noktasında 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] komutuyla etkinleştirilebilir. Bu durum, hem görünümlerle sayfalama hem de Compose ile sayfalama için geçerlidir.
  • CoroutineDispatcher yerine CoroutineContext kabul eden PagingDataAdapter ve AsyncPagingDataDiffer için oluşturucular eklendi.
  • Önceki () -> PagingSource lambda'lara kıyasla daha açık bir API yüzeyi sağlayan yeni bir PagingSourceFactory işlevsel arayüz eklendi. Bu fabrika, bir Pager'ı başlatmak için kullanılabilir.

Sürüm 3.2.0-rc01

21 Haziran 2023

androidx.paging:paging-*:3.2.0-rc01 iptal edilir. 3.2.0-rc01 sürümü şu commit'leri içerir.

Harici Katkı (External Contribution)

  • Veyndan'a, Paging'in Android/JVM'ye özgü özelliklerden uzaklaşmasına katkıda bulunduğu için teşekkür ederiz. (#553, #554, #555, #559)

Sürüm 3.2.0-beta01

7 Haziran 2023

androidx.paging:paging-*:3.2.0-beta01 iptal edilir. 3.2.0-beta01 sürümü şu commit'leri içerir.

Paging Compose

  • Paging Compose, API kararlılığına resmen ulaştı. Bu nedenle, sürüm 1.0.0-alpha20 olarak güncellendi ve artık diğer tüm Paging yapılarının sürümüyle eşleşiyor.

API Değişiklikleri

Sürüm 3.2.0-alpha06

24 Mayıs 2023

androidx.paging:paging-*:3.2.0-alpha06 iptal edilir. 3.2.0-alpha06 sürümü şu commit'leri içerir.

Yeni Özellikler

  • Mevcut () -> PagingSource lambda'lardan daha açık bir API yüzeyi sağlayan yeni bir PagingSourceFactory işlevsel arayüz eklendi. Bu fabrika, Pager oluşturmak için kullanılabilir. (I33165, b/280655188)
  • Yalnızca değişmez bir veri listesinden yüklenen bir PagingSourceFactory almak için yeni paging-testing API'si List<Value>.asPagingSourceFactory() eklendi. Flow<List<Value>> adresindeki mevcut uzantı, birden fazla statik veri nesliyle test için kullanılmaya devam etmelidir. (Id34d1, b/280655188)

API Değişiklikleri

  • Sayfalama testindeki tüm herkese açık API'ler artık @VisibleForTesting ile açıklama eklenmiş durumda. Böylece bu API'lerin yalnızca testlerde kullanılması sağlanıyor. (I7db6e)
  • asSnapshot API artık CoroutineScope iletmenizi gerektirmiyor. Artık varsayılan olarak üst kapsamdan devralınan bağlamı kullanır. (Id0a78, b/282240990)
  • TestPager oluşturucu parametreleri, gerçek Pager oluşturucu parametrelerinin sırasıyla sezgisel olarak eşleşecek şekilde yeniden sıralandı (I6185a).
  • Sayfalama testinin lambda türü () -> PagingSource<Key, Value> kullanımını PagingSourceFactory<Key, Value> türüne taşıdı. (I4a950, b/280655188)

Davranış Değişiklikleri

  • asSnapshot Sayfalama testleri çalıştırmak için artık ana dağıtıcı gerekmiyor. Bu ayar artık test davranışında herhangi bir değişikliğe neden olmuyor. (Ie56ea)

Sürüm 3.2.0-alpha05

3 Mayıs 2023

androidx.paging:paging-*:3.2.0-alpha05 iptal edilir. 3.2.0-alpha05 sürümü şu commit'leri içerir.

API Değişiklikleri

  • asSnapshot Paging Testing API'si artık loadOperations parametresini varsayılan olarak boş bir lambda'ya ayarlıyor. Bu, ilk yenileme yükünden verileri almak için herhangi bir yük işlemi geçirmeden asSnapshot çağrılmasına olanak tanır. (Ied354, b/277233770)

Belgelerdeki İyileştirmeler

  • asPagingSourceFactory() ile ilgili dokümanları, bunun Flow üzerinde bir uzantı yöntemi olduğunu ve PagingSource örnekleri oluşturmak için yeniden kullanılabilir bir fabrika döndürdüğünü açıklayacak şekilde güncelledik. (I5ff4f, I705b5)
  • LoadResult.Page Oluşturucuyla ilgili dokümanlar, atlamayı desteklemek için itemsBefore ve itemsAfter değerlerinin geçersiz kılınması gerektiğini açıklayacak şekilde güncellendi. (Ied354)

Harici Katkılar

Sürüm 3.2.0-alpha04

8 Şubat 2023

androidx.paging:paging-*:3.2.0-alpha04 iptal edilir. 3.2.0-alpha04 sürümü şu commit'leri içerir.

Sayfalama Testi

  • paging-testing yapısı artık bir Pager'a sağlanacak Flow<List<Value>> öğesinden pagingSourceFactory oluşturmak için asPagingSourceFactory yöntemini içeriyor. Akıştan yayılan her List<Value>>, Sayfalandırılmış verilerin oluşturulmasını temsil eder. Bu, örneğin, PagingData dönüşümlerinde sayfalama testlerini kolaylaştırır. Bunun için, Pager'ın veri toplamak üzere kullanacağı bir veri kaynağı taklit edilir. (I6f230, b/235528239)
  • paging-testing yapısı, Flow<PagingData<T>> içinde yer alan verilerin doğruluğunu kontrol etmeye uygun yeni API'lerle genişletildi. Bu, örneğin ViewModel katmanınızdaki bir Flow<PagingData<T>> işlevinin çıktısını onaylamak için kullanılabilir.

    Bu işlem, asSnapshot Kotlin uzantısı kullanılarak yapılır. Bu uzantı, Flow<PagingData<Value>> öğesini doğrudan List<Value> öğesine çevirir.Flow<PagingData<Value>> asSnapshot lambda'sı, 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. Böylece, verilerin anlık görüntüsünün, sayfalara ayrılmış verilerinizin herhangi bir noktasında doğru olduğunu doğrulayabilirsiniz.

    // Create your ViewModel instance
    val viewModel = 
    // Get the Flow of PagingData from the ViewModel
    val data< Flow<PagingData<String>> = viewModel.data
    val snapshot: List<String> = data.asSnapshot {
      // Each operation inside the lambda waits for the data to settle before continuing
      scrollTo(index = 50)
    
      // While you can’t view the items within the asSnapshot call,
      // you can continuously scroll in a direction while some condition is true
      // i.e., in this case until you hit a placeholder item
      appendScrollWhile {  item: String -> item != Header 1 }
    }
    // With the asSnapshot complete, you can now verify that the snapshot
    // has the expected values
    

    asSnapshot, runTest içinde çalıştırılması beklenen bir suspend yöntemidir. Daha fazla bilgi için Android'de Kotlin eşyordamlarını test etme başlıklı makaleyi inceleyin. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)

API Değişiklikleri

  • AsyncPagingDataDiffer ve PagingDataAdapter'deki getItem ve peek kullanıcı arayüzü çağrıları artık yalnızca ana iş parçacığında çağrılabilir olarak doğru şekilde işaretleniyor. (I699b6)
  • TestPager tarafından kullanılan genel türlerden joker karakterler kaldırıldı. Böylece, bu yöntemlerin sonuçlarını Java programlama dilinde yazılmış kodda kullanmak kolaylaştı. (I56c42)

Sürüm 3.2.0-alpha03

24 Ekim 2022

androidx.paging:paging-*:3.2.0-alpha03 iptal edilir. 3.2.0-alpha03 sürümü şu commit'leri içerir.

Sayfalama Testi

Bu sürümde yeni bir yapı var: paging-testing. Bu yapay nesne, uygulamanızın her katmanının birim testini ve Paging ile entegrasyonunu ayrı ayrı yapmaya yönelik API'ler sağlar.

Örneğin, bu ilk sürümde, kendi özel PagingSource uygulamanızın davranışını Pager ve normalde uçtan uca sayfalama entegrasyonunu simüle etmek için ihtiyacınız olacak gerçek kullanıcı arayüzünden bağımsız olarak doğrulamanıza olanak tanıyan bir TestPager sınıfı bulunur.

TestPager, PagingSource test etmek için basitleştirilmiş bir API yüzeyi sağlarken Pager'ın gerçek uygulamasını yansıtan bir test çifti olan bir sahte olarak kabul edilmelidir. Bu API'ler suspend API'leridir ve Android'de Kotlin eşyordamlarını test etme kılavuzunda belirtildiği gibi runTest içinde çalıştırılmalıdır.

Bu API'lerin kullanımına ilişkin bir örneği, TestPager kullanmak üzere yeniden düzenlenmiş olan room-paging testlerinde bulabilirsiniz.

API Değişiklikleri

  • LoadResult.Page.data ile LoadResult.Page.iterator() arasında kolay yineleme yapılmasını sağlar. Bu, PagingSource.getRefreshKey yöntemine iletilen PagingState öğesinin pages özelliği gibi bir List<LoadResult.Page> verildiğinde Kotlin standart kitaplığı flatten yönteminin dolaylı olarak kullanılmasına olanak tanır. (Ie0718)

Sürüm 3.2.0-alpha02

10 Ağustos 2022

androidx.paging:paging-*:3.2.0-alpha02 iptal edilir. 3.2.0-alpha02 sürümünde bu commit'ler yer alıyor.

Yeni Özellikler

  • Sayfalama artık AsyncPagingDataDiffer veya PagingDataAdapter sınıfları aracılığıyla günlükler sağlayarak PagingData'dan toplanan hata ayıklama bilgilerini gösterir.
  • Günlükler, adb shell komutuyla etkinleştirilebilir adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159)

Hata Düzeltmeleri

  • paging-common:3.2.0-alpha01, paging-runtime:3.1.1 veya daha eski bir çalışma zamanı ile kullanılırken eksik PagingDataDiffer oluşturucu hatası düzeltildi.(b/235256201)

Sürüm 3.2.0-alpha01

1 Haziran 2022

androidx.paging:paging-*:3.2.0-alpha01 iptal edilir. 3.2.0-alpha01 sürümü şu commit'leri içerir.

API Değişiklikleri

  • CoroutineDispatcher yerine CoroutineContext kabul eden PagingDataAdapter ve AsyncPagingDataDiffer için oluşturucular eklendi. (Idc878)
  • Varsayılan olarak, PagingData.from() ve PagingData.empty() artık sunucu tarafında CombinedLoadStates'ı etkilemez. sourceLoadStates ve remoteLoadStates değerlerinin bu oluşturuculara iletilmesine olanak tanıyan yeni bir aşırı yükleme, LoadStates değerinin tamamen sonlandırıcı olarak ayarlanmasıyla ilgili mevcut davranışı korumak için eklendi (ör. NotLoading(endOfPaginationReached = false)) seçeneğini kullanabilirsiniz. Gerekirse uzak eyaletleri de dahil edebilirsiniz. LoadStates geçirilmezse statik PagingData alındığında sunum yapan tarafında önceki CombinedLoadStates korunur. (Ic3ce5, b/205344028)

Hata Düzeltmeleri

  • Boş değer döndüreceği ancak boş olmayan bir initialKey değerinin ayarlandığı durumlarda PagingSource.getRefreshKey() işlevinin sonucu artık initialKey işlevinin sonucuna göre doğru şekilde önceliklendiriliyor. (Ic9542, b/230391606)

Harici Katkı (External Contribution)

  • test-coroutines-lib taşıma işlemi nedeniyle :compose:ui:ui-test API'si (updateApi) güncellendi (I3366d).

Sürüm 3.1

Sürüm 3.1.1

9 Mart 2022

androidx.paging:paging-*:3.1.1 iptal edilir. 3.1.1 sürümü şu commit'leri içerir.

Hata Düzeltmeleri

  • .cachedIn() tarafından yanlışlıkla eklenen, nesiller arasındaki ara LoadState.NotLoading etkinlikleri kaldırıldı. Bu değişiklik, başarısız yüklemeler yeniden denenirken, yenileme sırasında veya geçersiz kılma sırasında oluşturulan gereksiz LoadState.NotLoading etkinlikleri kaldırarak LoadState değişikliklere tepki vermeyi çok daha kolay hale getirir.

Sürüm 3.1.0

17 Kasım 2021

androidx.paging:paging-*:3.1.0 iptal edilir. 3.1.0 sürümü şu commit'leri içerir.

3.0.0 sürümünden beri yapılan önemli değişiklikler

  • Flow<PagingData>.observable ve Flow<PagingData>.flowable API'leri artık deneysel değildir.
  • LoadState ile ilgili davranış değişiklikleri:
    • endOfPaginationReached, artık hem PagingSource hem de RemoteMediator için LoadType.REFRESH'de her zaman false
    • Sayfalandırma'daki LoadStates artık aşağı akışa yayınlanmadan önce hem PagingSource hem de RemoteMediator'den geçerli değerler bekliyor. Yeni nesil PagingData, artık yenileme durumu için her zaman doğru şekilde Loading ile başlayacak ve bazı durumlarda yanlışlıkla NotLoading olarak sıfırlanmayacak.
    • Sunucu API'lerindeki .loadStateFlow ve .addLoadStateListener artık her zaman aracı durumlarının null olarak ayarlandığı gereksiz bir ilk CombinedLoadStates göndermiyor.
  • Geçmiş nesillerde iptal işlemi artık geçersiz kılma / yeni nesillerde hemen gerçekleşiyor. Flow<PagingData> üzerinde .collectLatest kullanmak artık zorunlu olmasa da yine de önerilir.
  • PagingSource.LoadResult.Invalid, PagingSource.load'den yeni bir dönüş türü olarak eklendi. Bu durum, Paging'in bu PagingSource'ye yönelik bekleyen veya gelecekteki tüm yükleme isteklerini atmasına ve geçersiz kılmasına neden oluyor. Bu dönüş türü, veritabanından veya ağdan döndürülebilecek geçersiz veya eski verileri işlemek için tasarlanmıştır.
  • Kullanıcı arayüzünde sayfalar sunulurken eşzamanlı olarak tetiklenen .onPagesPresented ve .addOnPagesUpdatedListener sunucu API'leri eklendi. Sayfa güncellemeleri aşağıdaki senaryolarda gerçekleşebilir:
    • Yeni nesil PagingData'nın ilk yüklemesi, yeni nesil sunulan öğelerde herhangi bir değişiklik içerip içermediğine bakılmaksızın tamamlanır. Örneğin, Liste tamamen aynı olduğundan ilk yüklemeyi güncelleme olmadan tamamlayan yeni nesil yine de bu geri aramayı tetikler.
    • Eklenen sayfa yeni öğeler içermese bile sayfa eklenir.
    • Sayfa boş olsa bile bırakılır.

Sürüm 3.1.0-rc01

3 Kasım 2021

androidx.paging:paging-*:3.1.0-rc01 iptal edilir. 3.1.0-rc01 sürümü şu commit'leri içerir.

Hata Düzeltmeleri

  • Gözlemci yokken veya bir gözlemci yeni bir PagingData'ya geçerken Paging tarafından birden fazla yükleme etkinliğinin aşağı akışa gönderildiği durumlarda .cachedIn() içinde yarış durumu ve bellek sızıntısı sorunu düzeltildi. (Ib682e)

Sürüm 3.1.0-beta01

13 Ekim 2021

androidx.paging:paging-*:3.1.0-beta01 iptal edilir. 3.1.0-beta01 sürümü şu commit'leri içerir.

Hata Düzeltmeleri

  • Çok sayıda hızlı öğe erişiminin, öğelerin prefetchDistance'ta dikkate alınmamasına ve sayfa yüklemelerinin durmasına neden olabildiği sorun düzeltildi. Bu durum, özellikle birçok öğe, kullanıcının kaydırma yönüne karşı yüklemeye öncelik verecek şekilde aynı anda düzenlendiğinde sorun yaratır. Bu öğe erişimleri artık arabelleğe alınır ve bırakılmalarını önlemek için eşzamanlı olarak önceliklendirilir. (aosp/1833273)

Sürüm 3.1.0-alpha04

29 Eylül 2021

androidx.paging:paging-*:3.1.0-alpha04 iptal edilir. 3.1.0-alpha04 sürümü şu commit'leri içerir.

API Değişiklikleri

  • Flow<PagingData>.observable ve Flow<PagingData>.flowable API'leri artık deneysel değildir. (Ie0bdd)

Hata Düzeltmeleri

  • LoadStates için endOfPaginationReached artık LoadType.REFRESH için her zaman false olur. Daha önce, RemoteMediator REFRESH için endOfPaginationReached'ın true olması mümkündü ancak PagingSource için bu mümkün değildi. Bu davranış artık her zaman false döndürecek şekilde birleştirildi. REFRESH'in sonlandırıcı olması hiçbir zaman mantıklı olmadığından bu davranış artık LoadStates'teki API sözleşmesinin bir parçası olarak belgeleniyor. Sayfalandırmanın sonlandırılıp sonlandırılmayacağına karar verirken her zaman APPEND veya PREPEND yönlerini dikkate almanız gerekir. (I047b6)
  • Paging'deki LoadStates artık nesiller arasında aşağı akışa yayınlanmadan önce hem PagingSource hem de RemoteMediator'dan geçerli değerler bekliyor. Bu, PagingData'nın yeni nesillerinin, CombinedLoadStates.source.refresh içinde NotLoading göndermesini engeller. Bu, daha önce Loading durumundayken geçerliydi. PagingData'nın yeni nesilleri artık yenileme durumu için her zaman Loading ile doğru şekilde başlayacak ve bazı durumlarda önce NotLoading'e sıfırlanmayacak.

    Geçmiş nesillerde iptal işlemi artık geçersiz kılma/yeni nesillerde hızlı bir şekilde gerçekleşiyor. Flow<PagingData> üzerinde .collectLatest kullanmak artık zorunlu olmasa da bu işlem hâlâ önemle tavsiye edilir. (I0b2b5, b/177351336, b/195028524)

  • Sunucu API'lerindeki .loadStateFlow ve .addLoadStateListener artık her zaman aracı durumları null ve kaynak durumları NotLoading(endOfPaginationReached = false) olarak ayarlanmış bir ilk CombinedLoadStates'yi gereksiz yere göndermiyor. Bunun anlamı:

    1. RemoteMediator'ı kullanıyorsanız aracı durumları her zaman doldurulur.
    2. .loadStateFlow üzerinde yeni bir loadState dinleyicisi veya yeni bir toplayıcı kaydetmek, PagingData kaynağından gerçek bir CombinedLoadStates almadıysa artık mevcut değeri hemen yayınlamaz. Bu durum, bir toplayıcı veya dinleyici, PagingData gönderilmeden önce başlatılırsa ortaya çıkabilir. (I1a748)

Sürüm 3.1.0-alpha03

21 Temmuz 2021

androidx.paging:paging-*:3.1.0-alpha03 iptal edilir. 3.1.0-alpha03 sürümü şu commit'leri içerir.

API Değişiklikleri

  • PagingSource'a üçüncü bir LoadResult dönüş türü olan LoadResult.Invalid eklenir. Bir PagingSource.load, LoadResult.Invalid değerini döndürdüğünde, sayfalama yüklenen verileri siler ve PagingSource'u geçersiz kılar. Bu dönüş türü, veritabanından veya ağdan döndürülebilecek geçersiz veya eski verileri işlemek için tasarlanmıştır.

    Örneğin, temel alınan veritabanına yazma işlemi yapılıp PagingSource zamanında geçersiz kılınmazsa yüklediği destekleyici veri kümesinin değişmezliğine bağlı olarak tutarsız sonuçlar döndürebilir (ör. LIMIT OFFSET stilindeki VT uygulamaları). Bu senaryoda, yükleme işleminden sonra geçersiz kılma işleminin kontrol edilmesi ve LoadResult.Invalid değerinin döndürülmesi önerilir. Bu değer, Paging'in bu PagingSource'a yönelik bekleyen veya gelecekteki tüm yükleme isteklerini silmesine ve PagingSource'u geçersiz kılmasına neden olur.

    Bu dönüş türü, LivePagedList veya RxPagedList'ten yararlanan Paging2 API'si tarafından da desteklenir. Paging2'nin PagedList API'leriyle bir PagingSource kullanıldığında PagedList hemen ayrılır. Bu PagedList'e veri yükleme girişimleri durdurulur ve PagingSource'ta geçersiz kılma işlemi tetiklenir.

    LoadResult, kapalı bir sınıftır. Bu nedenle, PagingSource.load sonuçlarını doğrudan kullanan kullanım alanlarının derleme zamanında LoadResult.Invalid'i işlemesi gerekecek şekilde kaynakla uyumlu olmayan bir değişikliktir. Örneğin, dönüş türünü kontrol etmek için exhaustive-when'den yararlanan Kotlin kullanıcılarının geçersiz tür için bir kontrol eklemesi gerekir. (Id6bd3, b/191806126, b/192013267)

Hata Düzeltmeleri

  • PagingSource.registerInvalidatedCallback veya DataSource.addInvalidatedCallback aracılığıyla eklenen geçersiz kılma geri çağırmaları, önceden geçersiz kılınmış bir PagingSource / DataSource üzerinde kaydedilmişlerse artık otomatik olarak tetikleniyor. Bu düzeltme, ilk yükleme sırasında zaten geçersiz olan bir Kaynak sağlandığında Paging'in geçersiz kılma sinyallerini bırakmasına ve takılmasına neden olan yarış durumunu giderir. Ayrıca, geçersiz kılma geri çağırmaları artık en fazla bir kez çağrılacağı garanti edildiğinden tetiklendikten sonra düzgün şekilde kaldırılıyor. (I27e69)
  • Yeni oluşturulan bir PagedList akışından yer tutucu başlangıç değerini (InitialPagedList) gönderme. Örneğin: LivePagedListBuilder veya RxPagedListBuilder artık daha önce yüklenen verileri temizlemeyecek.

Sürüm 3.1.0-alpha02

1 Temmuz 2021

androidx.paging:paging-*:3.1.0-alpha02 iptal edilir. 3.1.0-alpha02 sürümünde şu commit'ler yer alıyor.

Yeni Özellikler

  • Gösterilen sayfalar kullanıcı arayüzünde güncellendikten hemen sonra tetiklenen onPagesPresented işleyicisi ve akış sunucusu API'leri eklendi.

    Bu güncellemeler kullanıcı arayüzüyle senkronize olduğundan, güncelleme uygulandıktan sonra durumu incelemek için .snapshot, .getItemCount gibi bağdaştırıcı yöntemlerini çağırabilirsiniz. .snapshot() işlevinin her güncellemede yapılması maliyetli olabileceğinden açıkça çağrılması için bırakıldığını unutmayın.

    Sayfa güncellemeleri aşağıdaki senaryolarda gerçekleşebilir:

    • Yeni nesil PagingData'nın ilk yüklemesi, yeni nesil sunulan öğelerde herhangi bir değişiklik içerip içermediğine bakılmaksızın tamamlanır. Örneğin: Liste tamamen aynı olduğundan güncellemeler olmadan ilk yüklemeyi tamamlayan yeni nesil yine bu geri çağırmayı tetikleyecektir.
    • Eklenen sayfa yeni öğeler içermese bile sayfa eklenir.
    • Bırakılan sayfa boş olsa bile sayfa bırakılır (I272c9, b/189999634).

Hata Düzeltmeleri

  • PagedList.dataSource'a LivePagedList veya RxPagedList tarafından oluşturulan ilk değerden erişildiğinde artık yanlışlıkla IllegalStateException (I96707) istisnası oluşturulmayacak.

Sürüm 3.1.0-alpha01

2 Haziran 2021

androidx.paging:paging-*:3.1.0-alpha01 iptal edilir. 3.1.0-alpha01 sürümü şu commit'leri içerir.

API Değişiklikleri

  • paging-rxjava3 tarafından sağlanan sınıflar artık androidx.paging.rxjava3 paketi altında yer alıyor. Böylece paging-rxjava2 (Ifa7f6) ile çakışmıyor.

Hata Düzeltmeleri

  • Sayfalama'nın bazen RecyclerView'a no-op farklılık etkinlikleri göndermesine ve bunun da belirli dinleyicilerin erken tetiklenmesine neden olabilen sorun düzeltildi. (Ic507f, b/182510751)

Harici Katkı (External Contribution)

  • rxjava3 yapay ürününe kullanımdan kaldırılan PagedList uyumluluk API'leri eklendi (Id1ce2, b/182497591)

Paging Compose Version 1.0.0

Sürüm 1.0.0-alpha20

24 Mayıs 2023

androidx.paging:paging-compose:1.0.0-alpha20 iptal edilir. Version 1.0.0-alpha20 contains these commits.

Yeni Özellikler

  • Paging Compose artık PagingData.from(fakeData) oluşturup bu PagingData öğesini MutableStateFlow içine sarmalayarak sahte verilerin listesini önizlemeyi destekliyor (ör. MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Bu verileri @Preview girişiniz olarak kullanarak collectAsLazyPagingItems() çağrıları, önizlenebilir LazyPagingItems sağlar. (I8a78d, b/194544557)

Hata Düzeltmeleri

  • pager.flow.cachedIn'dan LazyPagingItems içinde toplanan önbelleğe alınmış veriler, artık durum geri yükleme işleminden sonra eşzamansız toplama gerektirmeden anında kullanılabilir. Bu, durum geri yüklendikten sonra ilk oluşturma işleminde önbelleğe alınan verilerin hemen sunulmaya hazır olacağı anlamına gelir. (I97a60, b/177245496)

Sürüm 1.0.0-alpha19

3 Mayıs 2023

androidx.paging:paging-compose:1.0.0-alpha19 iptal edilir. 1.0.0-alpha19 sürümü şu commit'leri içerir.

Tüm geç yüklenen düzenleri destekleme

Daha önce Paging Compose, LazyListScope üzerinde özel items ve itemsIndexed uzantıları sağlıyordu. Bu nedenle, Paging Compose'u LazyVerticalGrid, HorizontalPager gibi diğer tembel düzenlerle veya Wear ve TV kitaplıkları tarafından sağlanan diğer özel tembel bileşenlerle kullanamıyordunuz. Bu esnek olmama durumunu ele almak, bu sürümdeki temel güncellemedir.

Daha fazla tembel düzeni desteklemek için API'leri farklı bir katmanda oluşturmamız gerekiyordu. Paging Compose, her tembel düzen için özel bir items API sağlamak yerine artık itemKey ve itemContentType içinde LazyPagingItems üzerinde biraz daha düşük düzeyli uzantı yöntemleri sunuyor. Bu API'ler, key ve contentType parametrelerini LazyColumn, LazyVerticalGrid için halihazırda mevcut olan standart items API'lerine ve HorizontalPager gibi API'lerdeki eşdeğerlerine uygulamanıza yardımcı olmaya odaklanır. (Ifa13b, Ib04f0, b/259385813)

Bu, LazyVerticalGrid karakterinin desteklenmesinin şu şekilde görüneceği anlamına gelir:

// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()

LazyVerticalGrid(columns = GridCells.Fixed(2)) {
  // Here we use the standard items API
  items(
    count = lazyPagingItems.itemCount,
    // Here we use the new itemKey extension on LazyPagingItems to
    // handle placeholders automatically, ensuring you only need to provide
    // keys for real items
    key = lazyPagingItems.itemKey { it.uniqueId },
    // Similarly, itemContentType lets you set a custom content type for each item
    contentType = lazyPagingItems.itemContentType { "contentType" }
  ) { index ->
    // As the standard items call provides only the index, we get the item
    // directly from our lazyPagingItems
    val item = lazyPagingItems[index]
    PagingItem(item = item)
  }
}

Bu yeni API'lerin kullanımına dair daha fazla örnek için lütfen örneklerimize göz atın.

Bu değişiklikler LazyColumn ve LazyRow örneklerini birkaç satır daha uzun hale getirse de Paging Compose'u kullanacaklar için tüm tembel düzenlerde tutarlılığın önemli bir faktör olduğunu düşündük. Bu nedenle, LazyListScope için mevcut uzantıların desteği sonlandırıldı. (I0c459, I92c8f, b/276989796)

API Değişiklikleri

  • Yeni API'lere geçişi kolaylaştırmak için LazyListScope üzerindeki 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

  • Paging Compose, bağımlılığını Compose 1.0.5'ten Compose 1.2.1'e güncelledi. (Ib1918, b/255283378)

Sürüm 1.0.0-alpha18

8 Şubat 2023

androidx.paging:paging-compose:1.0.0-alpha18, herhangi bir değişiklik yapılmadan yayınlanır. 1.0.0-alpha18 sürümü şu commit'leri içerir.

Sürüm 1.0.0-alpha17

24 Ekim 2022

androidx.paging:paging-compose:1.0.0-alpha17 iptal edilir. 1.0.0-alpha17 sürümü şu commit'leri içerir.

Yeni Özellikler

Sürüm 1.0.0-alpha16

10 Ağustos 2022

androidx.paging:paging-compose:1.0.0-alpha16 iptal edilir. 1.0.0-alpha16 sürümü şu commit'leri içerir.

Yeni Özellikler

  • Sayfalama artık LazyPagingItems sınıfı aracılığıyla günlükler sağlayarak PagingData'dan toplanan hata ayıklama bilgilerini gösterir.
  • Günlükler, adb shell 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 bir sürümle kullanılırken PagingDataDiffer oluşturucu hatasının eksik olması sorunu düzeltildi.(b/235256201,b/239868768)

Sürüm 1.0.0-alpha15

1 Haziran 2022

androidx.paging:paging-compose:1.0.0-alpha15 iptal edilir. Version 1.0.0-alpha15 contains these commits.

API Değişiklikleri

  • CoroutineDispatcher yerine CoroutineContext kabul eden PagingDataAdapter ve AsyncPagingDataDiffer için oluşturucular eklendi. (Idc878)

Hata Düzeltmeleri

  • LazyPagingItems artık ilk loadState değerini LoadState.Loading yenileme olarak ayarlıyor. (I55043, b/224855902)

Sürüm 1.0.0-alpha14

13 Ekim 2021

androidx.paging:paging-compose:1.0.0-alpha14 iptal edilir. 1.0.0-alpha14 sürümü şu commit'leri içerir.

Sürüm 1.0.0-alpha13

29 Eylül 2021

androidx.paging:paging-compose:1.0.0-alpha13 iptal edilir. 1.0.0-alpha13 sürümü şu commit'leri içerir.

API Değişiklikleri

  • LazyPagingItems.snapshot() işlevi, LazyPagingItems.itemSnapshotList özelliğiyle (Ie2da8) değiştirildi.
  • Desteği sonlandırılan LazyPagingItems.getAsState() kaldırıldı (Ie65e4)

Sürüm 1.0.0-alpha12

21 Temmuz 2021

androidx.paging:paging-compose:1.0.0-alpha12 iptal edilir. 1.0.0-alpha12 sürümü şu commit'leri içerir.

API Değişiklikleri

  • items(lazyPagingItems) ve itemsIndexed(lazyPagingItems), LazyColumn/Row ile sayfalama bağlantısı oluşturmak için kullanılır. Bu işlevler artık öğeyi temsil eden sabit bir anahtar belirtmenize olanak tanıyan option key parametresini kabul etmektedir. Anahtarlar hakkında daha fazla bilgiyi burada bulabilirsiniz. (I7986d)
  • lazyPagingItems.getAsState(index) işlevi artık kullanımdan kaldırıldı. Bunun 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 iptal edilir. 1.0.0-alpha11 sürümü şu commit'leri içerir.

Sürüm 1.0.0-alpha10

2 Haziran 2021

androidx.paging:paging-compose:1.0.0-alpha10 iptal edilir. Version 1.0.0-alpha10 contains these commits.

Sürüm 1.0.0-alpha09

18 Mayıs 2021

androidx.paging:paging-compose:1.0.0-alpha09 iptal edilir. Version 1.0.0-alpha09 contains these commits.

Hata Düzeltmeleri

  • LazyPagingItems'ın itemCount ve item getter özellikleri artık gözlemlenebilir. Bu sayede LazyVerticalGrid ile de kullanılabilir (Ie2446, b/171872064, b/168285687).

Oluşturma Uyumluluğu

  • androidx.paging:paging-compose:1.0.0-alpha09 yalnızca 1.0.0-beta07 ve sonraki Compose sürümleriyle uyumludur.

Sürüm 1.0.0-alpha08

24 Şubat 2021

androidx.paging:paging-compose:1.0.0-alpha08 iptal edilir. Version 1.0.0-alpha08 contains these commits.

Compose 1.0.0-beta01 ile entegre olacak şekilde güncellendi.

Sürüm 1.0.0-alpha07

10 Şubat 2021

androidx.paging:paging-compose:1.0.0-alpha07 iptal edilir. 1.0.0-alpha07 sürümü şu commit'leri içerir.

Compose alpha12 ile entegre olacak şekilde güncellendi.

Sürüm 1.0.0-alpha06

28 Ocak 2021

androidx.paging:paging-compose:1.0.0-alpha06 iptal edilir. 1.0.0-alpha06 sürümü şu commit'leri içerir.

Hata Düzeltmeleri

Compose 1.0.0-alpha11'e bağlı olacak şekilde güncellendi.

Sürüm 1.0.0-alpha05

13 Ocak 2021

androidx.paging:paging-compose:1.0.0-alpha05 iptal edilir. 1.0.0-alpha05 sürümü şu commit'leri içerir.

Compose 1.0.0-alpha10'a bağlı olacak şekilde güncellendi.

Sürüm 1.0.0-alpha04

16 Aralık 2020

androidx.paging:paging-compose:1.0.0-alpha04 iptal edilir. 1.0.0-alpha04 sürümü şu commit'leri içerir.

Hata Düzeltmeleri

  • Kolaylık özelliklerini güncelleyerek, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append hem aracı hem de kaynak yükleme durumları NotLoading olduktan sonra yalnızca Loading'dan NotLoading'ye geçiş yapacak şekilde değiştirdik. Bu sayede, uzaktan güncellemenin uygulandığından emin olabilirsiniz. (I65619)

Sürüm 1.0.0-alpha03

2 Aralık 2020

androidx.paging:paging-compose:1.0.0-alpha03 iptal edilir. 1.0.0-alpha03 sürümü şu commit'leri içerir.

  • Compose 1.0.0-alpha08 ile eşleşecek şekilde güncellendi.

Sürüm 1.0.0-alpha02

11 Kasım 2020

androidx.paging:paging-compose:1.0.0-alpha02 iptal edilir. 1.0.0-alpha02 sürümü şu commit'leri içerir.

API Değişiklikleri

  • .peek(), .snapshot(), .retry() ve .refresh() yöntemleri, AsyncPagingDataDiffer / PagingDataAdapter (Iddfe8, b/172041660) içinde bulunan işlevselliği sunan LazyPagingItem'ye eklendi.

Sürüm 1.0.0-alpha01

28 Ekim 2020

androidx.paging:paging-compose:1.0.0-alpha01 iptal edilir. 1.0.0-alpha01 sürümü şu commit'leri içerir.

Yeni Özellikler

paging-compose yapısı, Paging Library ile Jetpack Compose arasında entegrasyon sağlar. Basit bir kullanım örneği:

  @Composable
  @OptIn(ExperimentalLazyDsl::class)
  fun ItemsDemo(flow: Flow<PagingData<String>>) {
      val lazyPagingItems = flow.collectAsLazyPagingItems()
      LazyColumn {
          items(lazyPagingItems) {
              Text("Item is $it")
          }
      }
  }

Sürüm 3.0.1

Sürüm 3.0.1

21 Temmuz 2021

androidx.paging:paging-*:3.0.1 iptal edilir. 3.0.1 sürümü şu commit'leri içerir.

Hata Düzeltmeleri

  • LivePagedList veya RxPagedList tarafından üretilen başlangıç değerinden PagedList.dataSource'ya erişildiğinde artık yanlışlıkla IllegalStateException (I96707) istisnası oluşturulmayacak.

Sürüm 3.0.0

Sürüm 3.0.0

5 Mayıs 2021

androidx.paging:paging-*:3.0.0 iptal edilir. 3.0.0 sürümü şu commit'leri içerir.

3.0.0 sürümündeki başlıca özellikler

Paging 2.x.x'teki mevcut API'nin çoğu, aşağıdaki iyileştirmeleri sunmak için yeni Paging 3 API'leri lehine kullanımdan kaldırıldı:

  • Kotlin eş yordamları ve Flow için birinci sınıf destek
  • İptal ile ilgili destek
  • Dahili yükleme durumu ve hata sinyalleri
  • Yeniden deneme + yenileme işlevi
  • Üç DataSource alt sınıfı, birleştirilmiş bir PagingSource sınıfında birleştirildi.
  • Ayraç eklemek için yerleşik bir özellik de dahil olmak üzere özel sayfa dönüşümleri
  • Durum üstbilgileri ve altbilgileri yükleniyor

Sürüm 3.0.0-rc01

21 Nisan 2021

androidx.paging:paging-*:3.0.0-rc01 iptal edilir. 3.0.0-rc01 sürümü şu commit'leri içerir.

Hata Düzeltmeleri

  • Sayfalama'nın bazen RecyclerView'a no-op farklılık etkinlikleri göndermesine ve bunun da belirli dinleyicilerin erken tetiklenmesine neden olabilen sorun düzeltildi. (Ic507f, b/182510751)

Sürüm 3.0.0-beta03

24 Mart 2021

androidx.paging:paging-*:3.0.0-beta03 iptal edilir. 3.0.0-beta03 sürümü şu commit'leri içerir.

Hata Düzeltmeleri

  • Liste yeniden yüklendiğinde yer tutucuların işlenme şeklini, RecyclerView'da beklenmedik atlamaları önleyecek şekilde yeniledik. Ayrıntılar için NullPaddedDiffing.md dosyasına bakın. (If1490, b/170027529, b/177338149)
  • Çeşitli PagedList oluşturucular (eski uyumluluk yolu), .build() çağrıldığında artık ana iş parçacığında DataSource.Factory.create()'ı yanlış bir şekilde senkron olarak çağırmıyor. (b/182798948)

Sürüm 3.0.0-beta02

10 Mart 2021

androidx.paging:paging-*:3.0.0-beta02 iptal edilir. 3.0.0-beta02 sürümü şu commit'leri içerir.

API Değişiklikleri

  • Rx3 uzantıları artık doğru şekilde yayılıyor @ExperimentalCoroutinesApi Kaydolma şartı. Daha önce @get yöntemiyle işaretleniyorlardı. Bu yöntem, https://youtrack.jetbrains.com/issue/KT-45227 (I5733c) nedeniyle Kotlin derleyicisi tarafından yoksayılıyordu.

Hata Düzeltmeleri

  • Deneysel API'lerin herkese açık kullanımına kısıtlamalar getirme (I6aa29, b/174531520)
  • Uzak yenileme çağrıldığında PagingState değerinin her zaman null olmasına neden olan hata düzeltildi.
  • PagingSource tarafından döndürülen boş sayfaların, Paging'in prefetchDistance'ı karşılamak için tekrar getirmesini engelleyerek Paging'in "takılmasına" neden olabildiği hata düzeltildi.

Sürüm 3.0.0-beta01

10 Şubat 2021

androidx.paging:paging-*:3.0.0-beta01 iptal edilir. 3.0.0-beta01 sürümü şu commit'leri içerir.

API Değişiklikleri

  • Rx2 ve Rx3 sarmalayıcıları artık deneysel notu kullanıyor. paging-rxjava2 veya paging-rxjava3'te Rx uyumluluk sarmalayıcılarını kullanıyorsanız artık kullanımları @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d) ile açıklama eklemeniz gerekir.

Hata Düzeltmeleri

  • Uyumluluk yolları üzerinden v2 IndexOutOfBoundsException: Inconsistency detected API'leri kullanılırken bazen DataSource hatası veriliyordu. Bu sorun düzeltildi.
  • Uyumluluk yolları üzerinden kullanıldığında DataSource başlatılırken yapılan isInvalid araması artık ana iş parçacığı yerine fetchDispatcher'da doğru şekilde başlatılıyor. Bu düzeltme, Room'un PagingSource uygulaması kullanılırken ana iş parçacığında veritabanı erişiminden kaynaklanan IllegalStateException sorununu giderir.

Sürüm 3.0.0-alpha13

27 Ocak 2021

androidx.paging:paging-*:3.0.0-alpha13 iptal edilir. 3.0.0-alpha13 sürümünde şu commit'ler yer alıyor.

API Değişiklikleri

  • PagingSource.getRefreshKey artık isteğe bağlı olarak uygulanmaz. Bu işlev, varsayılan uygulaması olmayan soyut bir işlevdir. Kullanıcıları taşıyanlar, yalnızca null değerini döndüren varsayılan uygulamayı döndürmeye devam edebilir. Ancak getRefreshKey(), mümkünse PagingState.anchorPosition aracılığıyla sayfalama özelliğinin, kullanıcının mevcut kaydırma konumuna göre bir anahtar döndürerek görünüm alanı etrafında ortalanmış şekilde yüklenmeye devam etmesini sağlayan gerçek bir uygulamaya sahip olmalıdır. (I4339a)
  • InvalidatingPagingSourceFactory artık nihai sınıf (Ia3b0a)
  • İsteğe bağlı ek bir SeparatorType parametresiyle terminal ayırıcı (başlık / altbilgi) davranışının yapılandırılmasına izin verin. İki seçenek vardır:
    • FULLY_COMPLETE - Mevcut davranış: Terminal ayırıcıları eklemeden önce hem PagingSource hem de RemoteMediator'ın endOfPaginationReached'ı işaretlemesini bekleyin. RemoteMediator kullanılmıyorsa uzak loadState yoksayılır. Bu özellik, özellikle bölümü tamamen yüklediğinizde (ör. ağ gibi uzak bir kaynaktan getirme dahil) yalnızca bölüm ayırıcıları göstermek istediğinizde kullanışlıdır.
    • SOURCE_COMPLETE - RemoteMediator kullanılsa bile yalnızca PagingSource'un endOfPaginationReached işaretini koymasını bekleyin. Bu sayede üst bilgiler ve alt bilgiler, ilk yükleme ile eşzamanlı olarak sunulur. Böylece kullanıcıların terminal ayırıcıları görmek için kaydırma yapması gerekmez. (Ibe993, b/174700218)

Hata Düzeltmeleri

  • PageFetcher, yüklemeye başlamadan önce bir PagingSource geçersiz kılındığında meydana gelen nadir bir bellek sızıntısı düzeltildi. (I9606b, b/174625633)

Sürüm 3.0.0-alpha12

13 Ocak 2021

androidx.paging:paging-*:3.0.0-alpha12 iptal edilir. 3.0.0-alpha12 sürümünde şu commit'ler yer alıyor.

API Değişiklikleri

  • InvalidatingPagingSourceFactory, hiçbir zaman soyut yöntemi olmadığı için artık soyut bir sınıf değildir. (I4a8c4)
  • Java kullanıcıları için Lifecycle veya CoroutineScope yerine ViewModel'i kabul eden bir .cachedIn() aşırı yüklemesi eklendi. (I97d81, b/175332619)
  • Yürütücü'yü dönüştürme operatörü bağımsız değişkenlerine kabul ederek Java arayanların PagingData dönüştürme işlemlerini eşzamansız bir şekilde kullanmasına izin verin. Tüm -Sync dönüştürme operatörlerinin -Sync soneki kaldırıldı. Kotlin Coroutine kullanıcılarının, askıya alma bloğu kabul eden uzantı işlevini çağırarak belirsizliği gidermesi gerekiyor. Tüm PagingData dönüşüm operatörleri, statik PagingDataTransforms sınıfı altındaki uzantılara taşındı. Java kullanıcılarının bunları statik yardımcılar aracılığıyla çağırması gerekir. Örneğin: PagingDataTransforms.map(pagingData, transform) Kotlin kullanıcıları için söz dizimi aynıdır ancak işlevi içe aktarmanız gerekir. (If6885, b/172895919)

Hata Düzeltmeleri

  • Sayfalama sonuna zaten ulaşılmışsa adapter.refresh() sırasında RemoteMediator.load() işlevinin çağrılmamasına neden olan hata düzeltildi.

Sürüm 3.0.0-alpha11

16 Aralık 2020

androidx.paging:paging-*:3.0.0-alpha11 iptal edilir. 3.0.0-alpha11 sürümü şu commit'leri içerir.

Yeni Özellikler

  • Aşağıdaki temel kullanım alanları için kaydedilmiş durum desteği eklendi (özellikle katmanlı kaynak durumunda tam destek için çalışmalar devam etmektedir):
    • akış önbelleğe alınır ve uygulama sonlandırılmaz (ör. akış, görünüm modelinde önbelleğe alınır ve etkinlik süreçte yeniden oluşturulur)
    • sayfalama kaynağı sayılır, yer tutucular etkinleştirilir ve düzen kademeli değildir.

API Değişiklikleri

  • PagingSource.getRefreshKey() artık kararlı API (I22f6f, b/173530980)
  • PagingSource.invalidate artık açık bir işlev değil. Geçersiz kılma işlemi gerçekleştiğinde bildirim almak istiyorsanız geçersiz kılmayı geçersiz kılmak yerine registerInvalidatedCallback yöntemini çağırmayı düşünebilirsiniz. (I628d9, b/173029013, b/137971356)
  • Pager artık deneysel API'leri, dahil etme ek açıklaması aracılığıyla deneysel olmayan herkese açık API'ye sızdırmak yerine normal oluşturucularının yanı sıra tek bir deneysel oluşturucuya sahip. (I9dc61, b/174531520)
  • Kolaylık özelliklerini güncelleyerek, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append hem aracı hem de kaynak yükleme durumları NotLoading olduktan sonra yalnızca Loading'dan NotLoading'ye geçiş yapacak şekilde değiştirdik. Bu sayede, uzaktan güncellemenin uygulandığından emin olabilirsiniz. (I65619)
  • LoadParams.pageSize kaldırıldı (zaten kullanımdan kaldırılmıştı). PagingSource'unuzda LoadParams.loadSize kullanmanız önerilir.

    LoadParams.loadSize, ilk yükleme çağrısı hariç her zaman PagingConfig.pageSize değerine eşittir. İlk yükleme çağrısında ise PagingConfig.initialLoadSize değerine eşittir.

    Sayfalama veya PagedList kullanmadan Paging2 DataSource'unuzu test ediyorsanız pageSize, PagingConfig.pageSize ile eşleşmeyebilir. Bunun nedeni, initialLoadSize değerini de ayarlıyor olmanızdır. Testleriniz için önemliyse bunun yerine, DataSource yükleme yöntemleriniz için dahili olarak doğru PageSize'ı ayarlayan bir Pager/PagedList kullanmayı deneyin. (I98ac7, b/149157296)

Hata Düzeltmeleri

  • PagingConfig.maxSize ayarı yapılırken ayırıcılar kullanıldığında IllegalStateException nedeniyle oluşan kilitlenme sorunu düzeltildi. (I0ed33, b/174787528)
  • RemoteMediator ayarlandıysa (I8cf5a), ilk yüklemeden hemen sonra PREPEND / APPEND için yükleme durumunun NotLoading(endOfPaginationReached = true) olarak güncellenmemesine neden olan hata düzeltildi.
  • .snapshot(), .peek() gibi sunucu tarafı API'lerinin, ListUpdateCallback güncellemelerinde önceki (güncel olmayan) listeyi döndürmesine neden olan hata düzeltildi.
  • RemoteMediator ile kullanıldığında Ayırıcı operatörlerinin üstbilgi veya altbilgi eklememesine neden olan hata düzeltildi.
  • LoadState'in RemoteMediator için NotLoading olarak güncellenmesinin Loading durumunda takılmasına neden olan hata düzeltildi.
  • Paging2.0 uyumluluk API'si .asPagingSourceFactory()'nin, destekleyici DataSource'nin yanlış CoroutineDispatcher'da başlatılmasına neden olabildiği hata düzeltildi. Bu, özellikle bu uyumluluk yolunu kullanan Room'un PagingSource'un mevcut uygulaması kullanılırken kilitlenmeyi ve olası ANR durumlarını çözer.

Sürüm 3.0.0-alpha10

2 Aralık 2020

androidx.paging:paging-*:3.0.0-alpha10 iptal edilir. 3.0.0-alpha10 sürümünde şu commit'ler yer alıyor.

API Değişiklikleri

  • Desteği sonlandırılan dataRefreshFlow ve dataRefreshListener API'leri, loadStateFlow / Listener güncellemeleriyle gereksiz hale geldikleri için kaldırıldı. Taşıma işlemi yapanlar için loadStateFlow eşdeğeri şudur:

    loadStateFlow.distinctUntilChangedBy { it.refresh }
        .filter { it.refresh is NotLoading }
    

    (Ib5570, b/173530908)

Hata Düzeltmeleri

  • endOfPaginationReached for RemoteMediator REFRESH artık LoadState güncellemelerine doğru şekilde yayılıyor ve uzak APPEND ile PREPEND öğelerinin tetiklenmesini engelliyor. (I94a3f, b/155290248)
  • Boş başlangıç sayfası veya yoğun filtreleme nedeniyle boş bir liste sunulması artık PREPEND veya APPEND yüklemelerinin başlatılmasını engellemeyecek. (I3e702, b/168169730)
  • Geçersiz kılma işlemleri hızlı bir şekilde gerçekleştiğinde getRefreshKey işlevinin PagingSource'un sonraki oluşturma işlemlerinde çağrılmamasına neden olan sorun düzeltildi. (I45460, b/170027530)

Harici Katkı (External Contribution)

  • InvalidatingPagingSourceFactory adlı yeni bir soyut sınıf eklendi. Bu sınıf, .invalidate() API'siyle invalidate işlevini yayınladığı tüm PagingSource'lara yönlendirir. @claraf3'e teşekkür ederiz. (Ie71fc, b/160716447)

Bilinen Sorunlar

  • .insertSeparators() dönüşümünden gelen üst ve alt bilgiler, RemoteMediator kullanılırken hemen görünmeyebilir b/172254056
  • RemoteMediator'ın kullanılması, geçersiz kılma ve PagingSource.load(LoadParams.Refresh(...)) işlemleri RemoteMediator.load() döndürmeden önce tamamlanırsa uzak LoadState işleminin takılmasına neden olabilir. b/173717820

Sürüm 3.0.0-alpha09

11 Kasım 2020

androidx.paging:paging-*:3.0.0-alpha09 iptal edilir. 3.0.0-alpha09 sürümünde bu commit'ler yer alıyor.

API Değişiklikleri

  • replaceWith ifadesiyle dataRefreshFlow / Listener yöntemlerinin desteğini tamamen sonlandırın. (I6e2dd)

Hata Düzeltmeleri

  • RemoteMediator ile ayırıcılar kullanılırken ve endOfPagination döndürecek bir uzaktan yükleme hâlâ çalışırken bir geçersiz kılma işlemi tetiklendiğinde IllegalArgumentException hatasının oluşması sorunu düzeltildi (I3a260).

Sürüm 3.0.0-alpha08

28 Ekim 2020

androidx.paging:paging-*:3.0.0-alpha08 iptal edilir. 3.0.0-alpha08 sürümü şu commit'leri içerir.

API Değişiklikleri

  • DataSource.InvalidatedCallback işlevinin Kotlin / Java varyantları, Kotlin'de işlevsel arayüz aracılığıyla SAM dönüştürmeleri etkinleştirilerek birleştirildi (Kotlin 1.4'te kullanılabilir). Bu düzeltme, .map veya .mapByPage tarafından dönüştürüldükten sonra geçersiz kılma geri çağırmalarının Kotlin varyantının çağrılmamasına neden olan bir hatayı da düzeltir. (I1f244, b/165313046)

Hata Düzeltmeleri

  • Paging'in ViewPager ile etkileşimi önemli ölçüde iyileştirildi. Daha net bir ifadeyle, Sayfalama artık sayfa geçersiz kılma nedeniyle RemoteMediator#load çağrısını iptal etmeyecek. Ayrıca, REFRESH isteği başarıyla tamamlanana kadar REFRESH gerekli olduğunda artık ekleme/ön ekleme yükleme isteğinde bulunmaz. (I6390b, b/162252536)
  • androidx için MissingGetterMatchingBuilder ile ilgili API lint kontrolü etkinleştirildi (I4bbea, b/138602561)
  • .withLoadState* ConcatAdapter yardımcılarının, arka plan iş parçacığından RecyclerView'a bildirim gönderilmesi nedeniyle kilitlenmesine neden olan hata düzeltildi (I18bb5, b/170988309).
  • Çok küçük ve boş olmayan bir sayfanın yüklenmesinin bazen önceden getirme işleminin yüklemeleri doğru şekilde tetiklemesini engellediği hata düzeltildi.Iffda3 b/169259468

Sürüm 3.0.0-alpha07

1 Ekim 2020

androidx.paging:paging-*:3.0.0-alpha07 iptal edilir. 3.0.0-alpha07 sürümünde şu commit'ler yer alıyor.

API Değişiklikleri

  • Async PagingData Guava tabanlı operatörler artık yürütme bağlamını kontrol etmek için parametre olarak Executor'ı kabul ediyor. (Id4372)

Hata Düzeltmeleri

  • Yarış durumu nedeniyle RemoteMediator'da oluşan IndexOutOfBounds istisnası düzeltildi. (I00b7f, b/165821814)
  • DataSource -> PagingSource dönüşümünde, sonuçtaki PagingSource'un DataSource'tan gelen geçersiz kılma sinyallerini yoksaymasına neden olabilen bir yarış durumu düzeltildi.
  • Sayfa getirme mantığındaki, PagingDataAdapter.refresh() çağrılana kadar bazen PagingSource'un yeni nesillerini almasını engelleyen sorun düzeltildi.
  • PagingSource'a (ör. Room tarafından oluşturulan) dönüştürülmüş bir DataSource'u RemoteMediator ile birlikte kullanırken kaydırma konumunun bazen kaybolmasına neden olan sorun düzeltildi.

Harici Katkı (External Contribution)

  • PagingData için RxJava2, RxJava3 ve Guava tabanlı asenkron dönüşüm operatörleri eklediği için @simonschiller'a teşekkür ederiz.

Sürüm 3.0.0-alpha06

2 Eylül 2020

androidx.paging:paging-*:3.0.0-alpha06 iptal edilir. 3.0.0-alpha06 sürümü şu commit'leri içerir.

API Değişiklikleri

  • UnsupportedOperationException ile ilgili daha net mesajlar Sabit kimlikler için destek eksikliği artık her zaman PagingDataAdapter.setHasStableIds çağrıldığında gösteriliyor. (Ib3890, b/158801427)

Hata Düzeltmeleri

  • insertSeparators artık boş sayfaları filtrelemiyor. Bu sayede, birçok boş sayfanın eklendiği durumlarda bile sunum yapan kişi tarafından önceden getirme mesafesine uyulabiliyor. (I9cff6, b/162538908)

Sürüm 3.0.0-alpha05

19 Ağustos 2020

androidx.paging:paging-*:3.0.0-alpha05 iptal edilir. 3.0.0-alpha05 sürümünde aşağıdaki commit'ler yer alıyor.

Hata Düzeltmeleri

  • Sayfalama özelliği, sunulan veriler yoğun şekilde filtrelenmiş olsa bile sayfaları artık doğru şekilde önceden getiriyor.
  • LoadResult.Error'ı yeniden yüklenen bir öğeye döndürmek artık öğe erişimlerinin yeniden denemeyi yanlış şekilde tetiklemesine neden olmuyor.

Harici Katkı (External Contribution)

  • Bazı testleri temizlememize yardımcı olan Clara F'ye teşekkür ederiz. (549612)

Sürüm 3.0.0-alpha04

5 Ağustos 2020

androidx.paging:paging-*:3.0.0-alpha04 iptal edilir. 3.0.0-alpha04 sürümünde şu commit'ler yer alıyor.

API Değişiklikleri

  • peek() API'si AsyncPagingDataDiffer ve PagingDataAdapter'ye eklenerek sunulan verilere sayfa yüklemeleri tetiklenmeden erişilmesine olanak tanındı. (I38898, b/159104197)
  • Gösterilen öğelerin sayfa getirme işlemi tetiklenmeden alınmasına olanak tanımak için PagingDataAdapter ve AsyncPagingDataDiffer'ye snapshot() API'si eklendi. (I566b6, b/159104197)
  • Statik listelerin sunulmasına olanak tanıyan bir PagingData.from(List<T>) oluşturucu eklendi.Bu oluşturucu, belirli durumlarda (ör. ilk YENİLEME işlemi tamamlanmadan önce) statik listeleri göstermek için genel PagingData akışıyla birleştirilebilir veya dönüşümleri test etmek için kullanılabilir. (Id134d)
  • dataRefresh Flow / Listener API'leri, REFRESH işleminde sunulan öğelerin durumunu göstermek için tasarlanmıştı. Ancak loadState Flow / Listener geri çağırma zamanlaması ve itemCount özelliği iyileştirildiğinden bu API'ler gereksiz hale geldi (Ia19f3).
  • PagingSource ve RemoteMediator için RxJava3 uyumluluk sarmalayıcıları eklendi (I49ef3, b/161480176)

Hata Düzeltmeleri

  • PositionalDataSource dönüştürülen PagingSource, toPagingSourceFactory yardımcı aracılığıyla, PagingSource dahil olmak üzere artık atlamayı desteklemek için kendilerini doğru şekilde işaretliyor. (I3e84c, b/162161201)
  • submitData'nın senkron varyantının kullanılması bazen yarışa yol açarak ClosedSendChannelException'ya (I4d702, b/160192222) neden oluyordu. Bu hata düzeltildi.

Harici Katkı (External Contribution)

  • Slack adına RxJava3 uyumluluk sarmalayıcıları eklediği için Zac Sweers'e teşekkür ederiz. (I49ef3, b/161480176)

Sürüm 3.0.0-alpha03

22 Temmuz 2020

androidx.paging:paging-*:3.0.0-alpha03 iptal edilir. 3.0.0-alpha03 sürümünde şu commit'ler yer alıyor.

API Değişiklikleri

  • PagingState için oluşturucu artık herkese açık. Bu sayede getRefreshKey() uygulamalarının test edilmesi kolaylaşacak (I8bf15).
  • Orijinal ve Kotlin varyantları arasındaki belirsizliği gidermek için DataSource Kotlin harita işlevi varyantlarını Java'dan gizleyin. (If7b23, b/161150011)
  • Kotlin kullanıcılarına kolaylık sağlamak için tasarlanan gereksiz API'ler @JvmSynthetic olarak işaretlendi (I56ae5).
  • LoadResult.Page'in oluşturucusu için aşırı yüklemeler eklendi. Bu aşırı yüklemelerde itemsBefore ve itemsAfter, varsayılan olarak COUNT_UNDEFINED'a (I47849) ayarlanır.
  • Mevcut PagingData operatörlerinin askıya alma yöntemlerini kabul etmesini sağlandı ve Java kullanıcıları için yeni mapSync, flatMapSync ve filterSync askıya alma dışı operatörleri kullanıma sunuldu. Mevcut dönüştürme yöntemleri uzantı işlevlerine taşındı. Bu nedenle, Kotlin kullanıcılarının artık bunları içe aktarması gerekiyor. (I34239, b/159983232)

Hata Düzeltmeleri

  • Room (ve PositionalDataSource) PagingSource'lar artık ilk sayfanın bir parçası olarak önde gelen bir ayırıcı gösterecek. Böylece kullanıcının bunu görmek için kaydırması gerekmeyecek. (I6f747, b/160257628)
  • Yer tutuculardaki öğe erişimleri artık PagingData.filter() tarafından dönüştürüldükten sonra istenen dizini karşılayan bir sayfa döndürülene kadar PagingSource yüklemelerini doğru şekilde tetikliyor (I95625, b/158763195).
  • Bazen PagingSource, hata döndürdükten sonra kaydırma yapıldığında PagingDataAdapter.retry() işlevinin yeniden denemesini engelleyen hata düzeltildi. (I1084f, b/160194384)
  • Bir sayfa bırakıldıktan sonra öğe erişiminin, önceden getirme mesafesi içinde olmasına rağmen sayfaların yüklenmemesine neden olan sorun düzeltildi (Ie95ae, b/160038730).
  • PagingConfig.maxSize ayarlandığında, bırakma etkinliğinden sonra artık yer tutucular etkinleştirilmiyor (I2be29, b/159667766)

Sürüm 3.0.0-alpha02

24 Haziran 2020

androidx.paging:paging-*:3.0.0-alpha02 iptal edilir. 3.0.0-alpha02 sürümünde şu commit'ler yer alıyor.

API Değişiklikleri

  • PagingConfig oluşturucusuna, yaygın varsayılan değerlerle (I39c50, b/158576040) aşırı yüklemeler eklendi.
  • Ortak varsayılan değerlere (Ie91f5) sahip PagingDataAdapter ve AsyncPagingDataDiffer oluşturucuları için aşırı yüklemeler eklendi.
  • dataRefreshFlow ve dataRefreshListener bağdaştırıcı API'leri artık 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 yaygın öğe erişimi için PagingState'e yardımcılar eklendi (I3b5b6, b/158892717)

Hata Düzeltmeleri

  • Pager, artık geçersiz PagingSource'ların yanlışlıkla yeniden kullanılmasını önlemek için fabrikada PagingSource'un yeniden kullanılıp kullanılmadığını kontrol ediyor. Bu durum, net olmayan bir hataya (I99809, b/158486430) neden oluyordu.
  • RemoteMediator REFRESH'ten kaynaklanan hatalar artık PagingSource'un yüklenmesini engellemiyor (I38b1b, b/158892717)
  • submitData'nın askıya alma işlemi yapmayan sürümü, submitData'nın askıya alma işlemi yapan sürümünden sonra çağrıldığında birden fazla PagingData üzerinde eşzamanlı toplama işlemi yapılması nedeniyle artık kilitlenmeye neden olmuyor. (I26358, b/158048877)
  • Yapılandırma değişikliğinden sonra oluşabilecek "sayfalayıcıdan iki kez toplanamıyor" istisnası düzeltildi (I58bcc, b/158784811).

Sürüm 3.0.0-alpha01

10 Haziran 2020

androidx.paging:paging-*:3.0.0-alpha01 iptal edilir. 3.0.0-alpha01 sürümü şu commit'leri içerir.

Paging Library, çeşitli önemli yeni özelliklerin etkinleştirilmesi için 3.0 sürümüne güncellendi.

3.0 sürümündeki yeni özellikler

Bilinen Sorunlar

  • Paging 3 javadocs henüz kullanılamıyor. Bu süre zarfında lütfen yukarıda bağlantısı verilen rehberleri veya Kotlin dokümanlarını kullanın. (b/158614050)

Sürüm 2.1.2

Sürüm 2.1.2

18 Mart 2020

androidx.paging:paging:2.1.2 iptal edilir. 2.1.2 sürümü, 2.1.0 sürümüne kıyasla şu commit'leri içerir.

Hata Düzeltmeleri

  • Geçersiz kılma sırasında konum dönüştürülürken nadir durumlarda IndexOutOfBoundsException ile ilgili düzeltme.

Yayın sorunu

  • Sayfalama sürümü 2.1.1, yanlış yapılandırılmış bir daldan hatalı bir şekilde yayınlandı. Bu durum, gelecekteki bir sürümde kullanıma sunulacak olan kısmen uygulanmış API'lerin ve işlevlerin açığa çıkmasına neden oldu.

  • Sayfalama 2.1.2, başlangıçta 2.1.1 sürümünde yayınlanan yükü merkezleme düzeltmesini içerir ancak bu kez 2.1.0 sürümünde doğru şekilde seçilmiştir. Şu anda 2.1.1 sürümünü kullanıyorsanız bu sürüme yükseltmeniz önemle tavsiye edilir.

Sürüm 2.1.1

Sürüm 2.1.1

18 Aralık 2019

androidx.paging:paging-*:2.1.1 iptal edilir. 2.1.1 sürümü şu commit'leri içerir.

Hata düzeltmeleri

  • Yer tutucular devre dışı bırakıldığında, PositionalDataSources'tan gelen bitişik ilk yüklemeler artık son erişim etrafında ortalanıyor

Sürüm 2.1.0

Sürüm 2.1.0

25 Ocak 2019

Sayfalama 2.1.0, 2.1.0-rc01'ten herhangi bir değişiklik yapılmadan yayınlandı.

Sürüm 2.1.0-rc01

6 Aralık 2018

Sayfalama 2.1.0-rc01, 2.1.0-beta01'ten herhangi bir değişiklik yapılmadan yayınlandı.

Sürüm 2.1.0-beta01

1 Kasım 2018

Sayfalama 2.1.0-beta01, 2.1.0-alpha01'ten herhangi bir değişiklik yapılmadan yayınlandı.

Sürüm 2.1.0-alpha01

12 Ekim 2018

Sayfalama 2.1.0-alpha01, her yapıt için KTX uzantı kitaplıklarının yanı sıra sayfa bırakma gibi iki önemli ekleme ve çeşitli API değişiklikleri ile hata düzeltmeleri içerir.

API Değişiklikleri

  • Belleğe yüklenen öğe sayısını sınırlamak için PagedList.Config.Builder.setMaxSize() eklendi.
  • androidx.paging.Config(), PagedList.Config.Builder için Kotlin alternatifi olarak eklendi
  • androidx.paging.PagedList(), PagedList.Builder için Kotlin alternatifi olarak eklendi
  • DataSourceFactory.toLiveData(), LivePagedListBuilder için Kotlin alternatifi olarak eklendi
  • DataSourceFactory.toObservable() ve toFlowable(), RxPagedListBuilder için Kotlin alternatifleri olarak eklendi.
  • PagedList değiştirildiğinde dinlemek için AsyncPagedListDiffer.addPagedListListener() eklendi. b/111698609
  • Eski ve yeni listeyi geçen PagedListAdapter.onCurrentListChanged() varyantı eklendi, önceki varyant kullanımdan kaldırıldı.
  • Sayfalandırılmış liste farklılaştırıldıktan sonra görüntülendiğinde tetiklenen ek bir geri çağırma işlevi alan PagedListAdapter/AsyncPagedListDiffer.submitList() varyantları eklendi. Bu sayede, PagedList değişimini diğer kullanıcı arayüzü güncellemeleriyle senkronize edebilirsiniz. b/73781068
  • Bellekte kaç öğe olduğunu öğrenmek için PagedList.getLoadedCount() simgesi eklendi. Yer tutucular devre dışı bırakılırsa dönüş değerinin her zaman .size()'ya eşit olacağını unutmayın.

Hata Düzeltmeleri

  • Listeler yeniden kullanılıyorsa karşılaştırma yapılırken oluşan yarış durumu düzeltildi. b/111591017
  • PagedList.loadAround() artık dizin geçersiz olduğunda IndexOutOfBoundsException hatası veriyor. Daha önce, net olmayan başka bir istisna nedeniyle kilitlenebiliyordu.
  • Çok küçük bir ilk yükleme boyutuyla birlikte değişmeyen verilerin daha fazla yüklenmemesine neden olan sorun düzeltildi. b/113122599

Sürüm 2.0.0

Sürüm 2.0.0

1 Ekim 2018

Sayfalama 2.0.0, tek bir hata düzeltmesiyle yayınlandı.

Hata Düzeltmeleri

  • PositionalDataSource ve yer tutucular kullanılarak çok hızlı kaydırma yapıldığında meydana gelebilecek kilitlenme sorunu düzeltildi b/114635383.

Sürüm 2.0.0-beta01

2 Temmuz 2018

Hata Düzeltmeleri

  • Bazı öne ekleme işlemlerinde (yer tutucular devre dışı, PositionalDataSource) içeriğin kaybolması sorunu düzeltildi. b/80149146
  • (1.0.1 sürümünde yayınlandı) PagedListAdapter ve AsyncPagedListDiffer'nin taşıma etkinliklerini bildirememesine neden olan kilitlenme sorunları düzeltildi. b/110711937

AndroidX Öncesi Bağımlılıklar

Aşağıdaki Paging'in AndroidX öncesi sürümleri için bu bağımlılıkları ekleyin:

dependencies {
    def paging_version = "1.0.0"

    implementation "android.arch.paging:runtime:$paging_version"

    // alternatively - without Android dependencies for testing
    testImplementation "android.arch.paging:common:$paging_version"

    // optional - RxJava support
    implementation "android.arch.paging:rxjava2:$paging_version"
}

Sürüm 1.0.1

Sürüm 1.0.1

26 Haziran 2018

Sayfalama 1.0.1, runtime sürümünde tek bir hata düzeltmesiyle yayınlandı. Kararlılık için 1.0.1 kullanmanızı önemle tavsiye ederiz. Paging RxJava2 1.0.1 de yayınlandı ve 1.0.0-rc1 ile aynı.

Hata Düzeltmeleri

  • PagedListAdapter ve AsyncPagedListDiffer hareket etkinliklerini bildiremediğinde yaşanan kilitlenme sorunları düzeltildi. b/110711937

RxJava2 Sürüm 1.0.0

RxJava2 Version 1.0.0-rc1

16 Mayıs 2018

Paging RxJava2 1.0.0-rc1, ilk alfa sürümünden herhangi bir değişiklik yapılmadan sürüm adayına taşınıyor.

Sürüm 1.0.0

Sürüm 1.0.0-rc1

19 Nisan 2018 Paging Release Candidate

Paging 1.0.0 sürümü için başka bilinen sorunumuz veya planlanmış yeni özelliğimiz bulunmamaktadır. Lütfen projelerinizi 1.0.0-rc1 kullanacak şekilde yükseltin ve sağlam bir 1.0.0 yayınlayabilmemiz için bu özelliği test etmemize yardımcı olun.

Bu sürümde değişiklik yapılmamıştır. 1.0.0-beta1 sürümüyle aynıdır.

Sürüm 1.0.0-beta1

5 Nisan 2018

Sayfalama, yayın adayı sürümüne geçmeden önce kısa bir süre beta sürümünde kalacak. Paging 1.0 için başka API değişikliği planlamıyoruz ve API değişiklikleri için çok katı şartlar uyguluyoruz.

Paging için alfa RxJava2 desteği ayrı bir isteğe bağlı modül (android.arch.paging:rxjava2:1.0.0-alpha1) olarak yayınlanır ve kararlı hale gelene kadar geçici olarak ayrı şekilde sürüm oluşturulur.

Bu yeni kitaplık, LivePagedListBuilder için RxJava2 alternatifi sunar. Observable ve Flowable oluşturabilir, Executor yerine Scheduler alır:

Kotlin

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

Java

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

Yeni Özellikler

  • RxPagedListBuilder, yeni android.arch.paging:rxjava2 yapısı aracılığıyla eklenir.

API Değişiklikleri

  • Oluşturucularda yürütücülerin rolünü netleştirmek için API değişiklikleri:

    • setBackgroundThreadExecutor(), setFetchExecutor() olarak yeniden adlandırıldı (PagedList.Builder ve LivePagedListBuilder içinde)

    • setMainThreadExecutor() adlı öğeyi setNotifyExecutor() olarak yeniden adlandırdı (PagedList.Builder içinde).

  • PagedList.mCallbacks üyesi gizli olarak ayarlandı.

Hata Düzeltmeleri

  • LivePagedListBuilder, Arch Components IO iş parçacığı havuzu yerine belirtilen yürütücüde ilk PagedList yüklemeyi tetikler.

  • Dahili DataSource sarmalayıcılarındaki geçersiz kılma davranışı düzeltildi (DataSource.map ve yer tutucu devre dışı PositionalDataSource yükleme işlemlerini uygulamak için kullanılır) b/77237534

Sürüm 1.0.0-alpha7

21 Mart 2018

Sayfalama 1.0.0-alpha7, Yaşam Döngüleri 1.1.1 ile birlikte kullanıma sunulur. Paging alpha7, yukarıda belirtilen Function sınıfının taşınmasına bağlı olduğundan lifecycle:runtime bağımlılığınızı android.arch.lifecycle:runtime:1.1.1 olarak güncellemeniz gerekir.

Sayfalama alpha7, Sayfalama beta sürümüne ulaşmadan önceki son sürüm olarak planlanmıştır.

API Değişiklikleri

  • DataSource.LoadParams nesneleri artık herkese açık bir oluşturucuya sahip ve DataSource.LoadCallback nesneleri artık soyut. Bu, DataSource sarmalamayı veya sahte bir geri arama ile doğrudan DataSource test etmeyi sağlar. b/72600421
  • DataSource ve DataSource.Factory için eşleyiciler
    • map(Function<IN,OUT>), DataSource tarafından yüklenen sonuçları dönüştürmenize, sarmalamanıza veya süslemenize olanak tanır.
    • mapByPage(<List<IN>,List<OUT>>), toplu işleme için de aynı işlemi sağlar (ör. SQL'den yüklenen öğelerin ek olarak ayrı bir veritabanına sorgu göndermesi gerekiyorsa bu işlem toplu olarak yapılabilir).
  • PagedList#getDataSource(), kolaylık yöntemi olarak eklendi b/72611341
  • recyclerview.extensions paketinin kalıntıları ve LivePagedListProvider dahil olmak üzere, desteği sonlandırılan tüm sınıflar API'den kaldırıldı.
  • DataSource.Factory, harita işlevini etkinleştirmek için arayüzden soyut sınıfa değiştirildi.

Hata Düzeltmeleri

  • Oluşturucular nihai olacak şekilde değiştirildi. b/70848565
  • Room DataSource uygulaması artık çok tabanlı sorguları işleyecek şekilde düzeltildi. Bu düzeltme Room 1.1.0-beta1'de yer alıyor. Yukarıdaki bilgilere göz atın.
  • Yer tutucular etkinleştirilmişse ve toplam boyut, sayfa boyutunun tam katıysa BoundaryCallback.onItemAtEndLoaded işlevinin PositionalDataSource için çağrılmamasına neden olan hata düzeltildi.

Sürüm 1.0.0-alpha5

22 Ocak 2018

Hata Düzeltmeleri

  • Yer tutucular devre dışı bırakıldığında sayfa yükleme sorununu düzeltme b/70573345
  • IllegalArgumentException hatası b/70360195'i izlemek için ek günlük kaydı (ve spekülatif Room tarafı düzeltmesi)
  • Javadoc örnek kod düzeltmeleri b/70411933, b/71467637