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:

  • Sayfalandırılmış 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ı ve akışları için birinci sınıf destek.
  • Yenileme ve yeniden deneme özellikleri de dahil olmak üzere hata işleme için yerleşik destek.

Kurulum

Paging 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.4.2"

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

  // Jetpack Compose integration
  implementation("androidx.paging:paging-compose:$paging_version")
}

Modern

dependencies {
  def paging_version = "3.4.2"

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

  // Jetpack Compose integration
  implementation "androidx.paging:paging-compose:$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 nasıl birlikte ç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ğine sahip 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. Sayfalanmış öğeleri, Compose'un LazyColumn ve LazyRow gibi geç düzen bileşenleri tarafından kolayca tüketilebilecek bir veri listesi olarak gösterir.

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() öğesine 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.