42 Android Programlama – Recycler View

Merhaba Bugün ki yazımızda Recycler view ile ilgili bir ders yapacağız. Haftaya jsoup ile birleştirerek örnek bir uygulamasını göstereceğiz.

Şimdi recycler view nedir ? 

ListView’in ileri bir versiyonu olan recycler view, list view’e göre performans bakımından bir çok yararı vardır. Listeli verileri göstermek için listview ‘leri kullanıyorsanız Lolipop 5 sürümü ile gelen ve kullanımı Listview’e benzeyen bir widget ile karşınızdayız. Daha düşük sürümlerde ise support v7 kütüphanesi kullanılabilir.

Daha Detaylı Bilgi için :

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html

https://developer.android.com/training/material/lists-cards.html

RecyclerView vs ListView

  • ListView’i implement ederken daha performanslı çalışması için ViewHolder kullanmışınızdır. Böylelikle daha akıcı ve performanslı bir liste görünümü sağlamış oluruz. RecyclerView’da ise ViewHolder kullanımı zorunlu kılınmıştır.
  • ListView doğası gereği dikey olarak kullanılmaktadır. Bazı workaround’lar ya da custom yapılar ile yatay olarak da kullanabilirsiniz. İşte bu durumda karşımıza LayoutManager sınıfı çıkıyor. Bu sınıf ile Linear (her zamanki alışkın olduğumuz şekilde listeler), StaggaredGrid (Pinterest usülü) ve Grid (resim galerisi gibi) tipinde listeler oluşturabilirsiniz. Dediğim gibi bu şekilde yapıları zaten oluşturabiliyorduk fakat bunun için custom kütüphaneler kullanmamız gerekiyordu.
  • ListView ile animasyon oluşturmak için yine custom yapılar ile animasyonlar yapabiliyorduk. RecyclerView ile artık tamamen yeni bir sınıf olan ItemAnimator sınıfını kullanabileceğiz. Bunun için örnek vermek gerekirse Gmail uygulamasında silme, seçme, çoklu mail seçme işlemlerinde kullanılan animasyonları verebiliriz. Ayrıca Gmail uygulaması RecyclerView için verilebilecek en güzel örnektir.
  • ListView ile çalışırken heralde Adapter’ı duymayanınız yoktur. RecyclerView’de ise Adapter sınıfı biraz daha genişletilerek kullanabiliyoruz.
  •  ListView oluşturduğumuz da itemlar arasında çizgi ya da ayırıcı (divider) olduğunu görüyoruz. Bunu istersek kaldırabiliriz ya da farklı bir şekilde tasarlayabiliriz. Bu ise RecyclerView’da default olarak görünmez şekilde geliyor.
  • ListView’da OnItemClickListener işlevini OnTouchItemListener ile kullanacağız.

Hadi RecyclerView oluşturalım.

Liste id’sine sahip recyclerview oluşturduk.

Activity’de çağırmak için;

Not : Eğer Recyclerview’in boyutunu değiştirmeyecekseniz performansı arttırmak için boyutunu sabitleyebilirsiniz.

LayoutManager Nedir ve LayoutManager Oluşturma

LayoutManager Recyclerview da öğelerin yerleşimini yapmamız için gereklidir, Kendi layoutManager’imizi RecyclerView.LayoutManager’i extend ederek kullanabiliriz ya da hali hazırda olan LayoutManager’i da kullanabiliriz. 3 tane LayoutManager Çeşidi var,

  • LinearLayoutManager : Alt alta tek sıra olacak şekilde.
  • GridLayoutManager: Alt alta fakat sıra sayısını siz belirleyebilirsiniz.
  • StaggeredGridLayoutManager: Alt alta ama boyutunu görselleştirilmesini siz belirlersiniz. Özellikle dergi, kıyafet uygulamalarında harika gidiyor.

Varsayılan ListView gibi LayoutManager kullanmak için,

Verilerin Tanımlanması:

Verilere erişmek için bir adapter’e ihtiyaç var. Kişileri temsil eden basit bir sınıf yazalım. ve verilerimizi ekleyelim. Burada örnek bir veri tanımlanması yapıyorum. Kendi örneğimde tek class olduğundan böyle bir tanımlama yapmadım.

Adapter Yazalım

 

Detaya inersek,

 

 

 ViewHolder Nedir : 

ViewHolder ListView kullanımının performans açısından iyileştirilmesini sağlayan bir pattern’dır. Biz getView() metodumuzu ViewHolder kullanmadan yazarsak eğer her eleman için getView metodu çağırıldığında view injection dediğimiz xml dosyamızdaki view’ların id’leri üzerinden bulunarak arka planda casting işlemi ardından bir değişkene atanması işlemi her seferinde gerekleşecekti. Ama bu pattern bizi bu zahmetli ve masraflı işten kurtarıp performans artışı sağlamaktadır.

Örneklendirecek olursak;

Listview için her item yükleneceği sırada findViewById() ile bileşenleri yani viewçağrılıp ve içine veriler yükleniyor ve ekrana basılıyor. Elimizde ne kadar veri varsa her seferinde bu işlem gerçekleşiyor. Bu durum elimizde binlerce veri olduğunda sıkıntı oluşturuyor ve performans kaybı yaşıyoruz. ViewHolder burada devreye giriyor ve her seferinde yeni bir view oluşturması yerine, eski view tekrar kullanılıyor ve veriler yüklenip ekrana basılıyor. Bu sayede ram şişmesi gibi bir problemden de kurtulmuş oluyoruz. Ancak burada şunu belirtmeliyim bizim menümüz veya yapacağınız 10 – 15 öğeli bir menü için bu yapı gözle görülür bir performans artışı sağlamaz.

 

Şimdi Adaptere devam ediyoruz. Constractırımızı yazıyoruz.

Adapter yazarken 3 tane implement edeceğiz metodumuzla ilgileniyoruz.

getItemCount Metodu :

viewHolderin başlatılması için metodumuz:

ve verileri göstermek için metodumuz:

Diğer metodlar ise silme ve güncelleme işlemleri içindir.

adapteri activitymizde kullanmak için,

Şimdi MainActivity’imiz,

activity_main.xml

dialog_layout.xml

 

 

satir_layout.xml

Uygulamanın kodu için:

https://github.com/umiitkose/RecyclerViewExample

Uygulamanın ekran görüntüleri:

 

 

20643710_1306698082760743_881338224_n 20668274_1306698106094074_1150448362_n 20668343_1306698062760745_135560701_n

 

Post Author: umiitkose

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">