Android Paging 3.0

Bir Android projesinde RecyclerView ile listeleme işlemlerini yapabiliriz. Küçük boyutlu listeler gösterebildiğimiz gibi liste elemanlarının fazla olduğu listeleri de RecyclerView üzerinde gösterebiliriz. Büyük boyutlu liste elemanlarının hepsini aynı anda göstermek efektif bir çözüm olmayacaktır. Listeyi parçalar halinde alıp göstermek daha uygun ve performanslı bir çözüm olacaktır. İşte burada paging devreye girer.


Görsel Referansı


Paging, Android Jetpack içerisinde bulunan ve verileri istenen büyüklükteki parçalar halinde gösterebilmemizi sağlayan bir componenttir. Paging 3 önceki versiyonlarından farklı olarak tamamıyla Kotlin ile yazılmıştır ve Kotlin Coroutines kullanmaktadır. Coroutines Flow yapısını desteklediği gibi RxJava ve LiveData desteği de bulunmaktadır. Bunun yanında error handling ve loading, fail, success gibi state kontrolü, caching gibi birçok özelliği de bulunmaktadır.


Kurulum


Projenizde Paging 3 kullanmak için app/build.gradle içerisine alttaki gibi dependencyleri ekliyoruz.

def paging_version = "3.0.0-alpha07"
implementation "androidx.paging:paging-runtime:$paging_version"

Eğer RxJava ile kullanmak istiyorsanız alttaki dependencyleri de eklemelisiniz.

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

DataStore


Öncelikle verilerin sayfalar halinde alınabilmesi için bir DataSource oluşturmamız gerekiyor.


Burada oluşturduğumuz DataSource classını PagingSource<Key, Value> classından türettik. PagingSource iki adet parametre almaktadır. Key sayfa numarasını temsil ederken, Value ise model classını temsil etmektedir.


Üstte gördüğünüz gibi load() metodu bir suspend metoddur. Bu metod içerisinde network istekleri ya da database çağırımları yapılabilir. Örnekte MovieApiService içerisindeki getPopularMovies(page: Int) metodunu load() metodu içerisinde çağırdık.


LoadParams objesi key ve sayfa numarası gibi değerler tutar. Bu sayede sayfa sayısına göre istekler gönderilmiş olur.


API tarafından dönen değerin success durumunda LoadResult.Page, fail olma durumunda ise gelen datalar LoadResult.Error objeleriyle wrap edilir.


Not: Eğer RxJava kullanıyorsanız oluşturduğumuz DataSource classını RxPagingSource classından extend etmelisiniz.


ViewModel


Oluşturulan PopularMoviesPagingSource classından gelen dataları ViewModel üzerinde almayı alttaki gibi yapabiliriz.



Pager objesi PopularMoviesPagingSource içerisindeki load() metodunu çağırır. Ayrıca PagingConfig objesinde verilen pageSize değerine göre liste elemanları getirilir.


Biz bu örnekte Flow ile çalıştığımız için .flow kullandık. Eğer LiveData olarak expose etmek istiyorsanız .liveData, RxJava için Flowable kullanıyorsanız .flowable, Observable kullanıyorsanız .observable kullanabilirsiniz.


RecyclerView üzerinde gösterme


Şimdi de aldığımız dataları RecyclerView üzerinde nasıl gösteririz buna bakalım.


Normal RecyclerView'ın adapter'den farkı PagingDataAdapter classından extend edilmiş olmasıdır. PagingDataAdapter 2 parametre alır, birincisi model classı ikinci ise ViewHolder'dır.


Son olarak listeyi Activity/Fragment üzerinde göstereceğiz.


Artık veriler RecyclerView üzerinde parçalar halinde, kullanıcı liste sonuna geldiğinde listelenecektir.


Ek olarak her parça liste çağrısı yapıldığında stateleri kontrol edebilmek için RecyclerView adapter içerisindeki addLoadStateListener metodu kullanılabilir.



Referanslar

https://developer.android.com/topic/libraries/architecture/paging/v3-overview

https://proandroiddev.com/how-to-use-the-paging-3-library-in-android-5d128bb5b1d8


#android #jetpack #paging3 #androidpaging

0 yorum

Son Paylaşımlar

Hepsini Gör

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
imageedit_2_9667998092.png
JetBrains Hakkında Detaylı Bilgi Alın

© 2021 by mobiler.dev

Kurumsal Yazar Hesapları

adesso.png
mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın