Paging kitaplığına genel bakış   Android Jetpack'in bir parçasıdır.

Paging kitaplığı, yerel depolama alanından veya ağ üzerinden daha büyük bir veri kümesinden veri sayfaları yükleyip görüntülemenize yardımcı olur. Bu yaklaşım, uygulamanızın hem ağ bant genişliğini hem de sistem kaynaklarını daha verimli kullanmasını sağlar. Paging kitaplığının bileşenleri, önerilen Android uygulama mimarisine uyacak, diğer Jetpack bileşenleriyle sorunsuz bir şekilde entegre olacak ve birinci sınıf Kotlin desteği sağlayacak şekilde tasarlanmıştır.

Paging kitaplığını kullanmanın avantajları

Paging kitaplığı aşağıdaki özellikleri içerir:

  • Sayfalanmış verileriniz için RAM önbelleğe alma. Bu sayede, uygulamanızın sayfalı verilerle çalışırken sistem kaynaklarını verimli bir şekilde kullanması sağlanır.
  • Uygulamanızın ağ bant genişliğini ve sistem kaynaklarını verimli bir şekilde kullanmasını sağlayan yerleşik istek tekilleştirme özelliği.
  • Kotlin eş yordamları, akışları ve Jetpack Compose için yerleşik destek
  • Yenileme ve yeniden deneme özellikleri de dahil olmak üzere hata işleme için yerleşik destek.
  • Sayfalama kaynaklarını ve veri dönüşümlerini doğrulamak için TestPager ve asSnapshot gibi özel test yardımcı programları.

Kurulum

Sayfalama bileşenlerini Android uygulamanıza aktarmak için uygulamanızın build.gradle dosyasına aşağıdaki bağımlılıkları ekleyin:

Kotlin

dependencies {
  val paging_version = "3.5.3"

  // Needed for Android Views and LiveData. Optional if only using
  // paging-compose
  implementation("androidx.paging:paging-runtime:$paging_version")

  // Needed to collect PagingData flows in Jetpack Compose
  implementation("androidx.paging:paging-compose:$paging_version")

  // Needed to test PagingSource and PagingData transformations in isolation
  testImplementation("androidx.paging:paging-testing:$paging_version")
}

Modern

dependencies {
  def paging_version = "3.5.3"

  // Needed for Android Views and LiveData. Optional if only using
  // paging-compose
  implementation "androidx.paging:paging-runtime:$paging_version"

  // Needed to collect PagingData flows in Jetpack Compose
  implementation "androidx.paging:paging-compose:$paging_version"

  // Needed to test PagingSource and PagingData transformations in isolation
  testImplementation "androidx.paging:paging-testing:$paging_version"
}

Kitaplık mimarisi

Paging kitaplığının bileşenleri, uygulamanızın üç katmanında çalışır:

  • Depo katmanı
  • ViewModel katmanı
  • Kullanıcı arayüzü katmanı
Depo katmanındaki PagingSource veya RemoteMediator bileşenlerinden ViewModel katmanındaki Pager bileşenine sayfalara ayrılmış veri akışlarını gösteren bir resim.
    Ardından Pager bileşeni, kullanıcı arayüzü katmanındaki geç yüklenen düzen bileşenlerine bir PagingData akışı sunar.
Şekil 1. Paging kitaplığının uygulama mimarinize nasıl uyduğunu gösteren bir örnek.

Bu bölümde, her katmanda çalışan Paging kitaplığı bileşenleri ve bu bileşenlerin sayfalı verileri yükleyip görüntülemek için birlikte nasıl çalıştığı açıklanmaktadır.

Depo katmanı

Depo katmanındaki birincil Paging kitaplığı bileşeni PagingSource'dir. Her PagingSource nesnesi, bir veri kaynağını ve bu kaynaktan verilerin nasıl alınacağını tanımlar. PagingSource nesnesi, ağ kaynakları ve yerel veritabanları dahil olmak üzere herhangi bir kaynaktan veri yükleyebilir.

Kullanabileceğiniz başka bir Paging kitaplığı bileşeni de RemoteMediator'dir. RemoteMediator nesnesi, yerel veritabanı önbelleği olan bir ağ veri kaynağı gibi katmanlı bir veri kaynağından sayfalama işlemini gerçekleştirir.

ViewModel katmanı

Pager bileşeni, bir PagingSource nesnesini ve PagingConfig yapılandırma nesnesini temel alarak reaktif akışlarda gösterilen PagingData örnekleri oluşturmak için herkese açık bir API sağlar.

ViewModel katmanını kullanıcı arayüzüne bağlayan bileşen PagingData'dir. PagingData nesnesi, sayfalandırılmış verilerin anlık görüntüsünü içeren bir kapsayıcıdır. Bir PagingSource nesnesini sorgular ve sonucu depolar.

Kullanıcı arayüzü katmanı

Birincil Paging UI API'si collectAsLazyPagingItems()'dir. Sayfalandırılmış öğeleri, Compose'un geç yüklenen düzen bileşenleri (ör. LazyColumn ve LazyRow) tarafından kolayca kullanılabilecek bir veri listesi olarak sunar.

Kullanıcı arayüzünün, adaptörlere veya fark mantığına gerek kalmadan veri yüklemelerine, güncellemelere ve hatalara otomatik olarak tepki vermesini sağlayan Compose uyumlu API'leri kullanmak için androidx.paging:paging-compose kitaplığını ekleyin. Döndürülen LazyPagingItems değerini bir LazyColumn içinde items()'e iletmek için Flow<PagingData> üzerinde collectAsLazyPagingItems() uzantı işlevini kullanın.

@Composable
fun MessageList(pager: Pager<Int, Message>) {
    val lazyPagingItems = pager.flow.collectAsLazyPagingItems()

    LazyColumn {
        items(
            lazyPagingItems.itemCount,
            key = lazyPagingItems.itemKey { it.id }
        ) { index ->
            val message = lazyPagingItems[index]
            if (message != null) {
                MessageRow(message)
            } else {
                MessagePlaceholder()
            }
        }
    }
}

Daha fazla bilgi için Büyük veri kümeleri (sayfalama) bölümüne bakın.