Kişisel web sayfamda yazılım, teknoloji ve genel hayat hakkında paylaşımlar yapmayı hedefliyorum.

ListView ve RecyclerView Arasındaki Farklar ve Sebepleri

Merhaba herkese. Bugün Android dünyasında veri gösterimi için hazırlanmış iki yapıdan bahsedeceğim. İki yapının artı ve eksi yönlerine değinmeye çalışacağım

Öncelikle şunu belirtmekte fayda var. Resmi olarak Android projelerinde ListView öğesini legacy kategorisi altına tutulmaktadır. Tabiki kullanılmaz diye bir şey yok fakat resmi sitedeki yönlendirmeyi eklemek istiyorum:

For a more modern, flexible, and performant approach to displaying lists, use Recyclerview

Peki bu RecyclerView denen öğe nasıl oluyor da daha modern, daha kullanışlı ve daha performanslı oluyor ? İnceleyelim.

Performans

En bariz farklardan biri olan performans konusuna biraz derine inelim.

ListView, ona verilen listenin boyutu kadar elemanı birden ekrana çizmeye çalışır. Diyelim ki bizim listemiz 1000 adet elemana sahip; fakat bizim ekranımız 10 adet eleman büyüklüğünde olsun. Bu durumda biz tek seferde 10 adet eleman görebilecek iken ListView bize 1000 elemanı da çizmeye başlar. Haliyle görmediğimiz veriler için uygulamamızın veri listeleme hızı düşecektir. Eleman sayımıza ve cihazımıza bağlı olarak belki de memoryLake yaşayacaktık.

Ama RecyclerView, bir formül ile çalışıp bizi bu dertten kurtarıyor. Bize,

2 + ekrana sığan eleman sayısı + 2

formülü ile sadece görebildiğimiz verilerin ağırlığını taşıtır. Fazladan 4 tane eleman sayısı ise ekranımızın altında ve üstünde kalan elemanlardır.

Burada bir not: Ekranımız eğer en üst kısımda ise yani daha yukarıya kaydıramayacağımız noktada ise bu formül ekrandaki eleman sayısı + 2 olur.

Özellikle görsel ağırlıklı verilerde bu fark hayat kurtarıcı seviyede oluyor.

ViewHolder

ViewHolder basitçe liste elemanlarını öğe üzerinde tutan yapıdır diyebiliriz. Bu yapı Listviewde isteğe bağlı kullanılırken; Recyclerviewde kullanımı zorunludur. Fakat Listview öğesinin elemanları gösteriş biçiminden kaynaklı oluşan sıkıntılar ViewHolder kullanımı ile ne kadar aza inse de RecyclerView kadar etkili olamamıştır.

LayoutManager

LayoutManager, adapter ve recyclerview arasındaki bir katman yada bir düzenleyici yapıdır. Elemanlarımızın ekranda nasıl konumlandırılacağı ile ilgilenir.

ListView kullanımında elemanlar dikey olarak hizalanırken; RecylerView ile karşımıza 3 seçenek çıkmaktadır:

  • LinearLayoutManager: Elemanlarımızı yatayda veya dikeyde hizalar.
  • GridLayoutManager: Elemanları belirlediğimiz satır ve sütunda aynı boyutta hizalar
  • StaggeredGridLayoutManager: Elemanlarımızı bizim belirlediğimiz sınırlarda farklı boyutlarda hizalar.

ItemAnimator

Elimizdeki verileri statik bir biçimde değil de animasyonlarla dinamik bir şekilde göstermek istersek burada da RecyclerView, ItemAnimator anahtarı ile kapılarını bizlere açıyor. Kendi bünyesinde bulunan animasyonları kullanabileceğimiz gibi Custom animation soranlara ise güzel bir seriyi şuraya bırakayım.

ItemDecorator

Elemanlarımız arasında divider gibi ayırıcı, belirtici bir ifade eklemek RecyclerView ile kolaylıkla gerçekleştirilebilir.

Evet, bu yazımda en temel farklara değinmeye çalıştım. Umarım faydalı olmuştur. Bir sonraki yazı hedefim bu farkları kod implementasyonu ve performans farklarına değinmek.

En yakın zamanda görüşmek üzere…

Share

You may also like...

Bir cevap yazın

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