RecyclerView’a Giriş

Burak Çelik
Kodluyoruz
Published in
4 min readMay 7, 2021

Herkese merhabalar 👋. Kotlin ile Android uygulamaları geliştirmeyi öğrenirken hem öğrendiklerimi pekiştirmek hem topluluğa bir şeyler katabilmek adına ufak çaplı yazılar yazmaya karar verdim. İlk yazımda Android dünyasının olmazsa olmazı RecyclerView’ı ele almak istedim. Tek bir yazıda RecyclerView hakkında bütün bildiklerimi yazmaktansa bir seri haline getirmenin daha iyi olacağı görüşündeyim.

Serinin ilk yazısında RecyclerView’ın ne olduğunu, ne işine yaradığını ve ufak bir demo ile nasıl koda aktardığımızı göstermek istiyorum. Hazırsanız RecyclerView’ı tanıyarak başlayalım 🚀.

Nedir bu RecyclerView?

RecyclerView basitçe bir veri setinin, verimli bir şekilde ekrana gelmesini sağlayan bir Class. Biz veriyi ve verinin bulunacağı bir layout sağlarız, RecyclerView kütüphanesi ise bu veriyi, vermiş olduğumuz kalıp içinde dinamik bir şekilde oluşturur.

Siz de benim gibi isminin niye RecyclerView olduğunu düşünüyor olabilirsiniz. Bunu şu şekilde açıklayabiliriz; RecyclerView’da scroll yaptığımız zaman ekran dışına çıkan view yok edilmez bunun yerine ekrana yeni gelecek olan verilerimiz için kullanılır.

Örneğin, aşağıdaki görseli ele aldığımız zaman içindeki verisi “1” olan View ekranın üstünden ekranın dışına doğru çıkıyor . RecyclerView bu View’i yok etmek yerine aşağıdan ekrana gelecek olan yeni verimiz, yani “8” için bu View’ı kullanıyor.

Sarı kutular ekranda gözükenler. Kırmızı kutular ise scroll yaptığımız zaman ekrandan çıkan ve ekrana giren kutuları temsil ediyor.

RecyclerView’ın View yok etmeyip, tekrar kullanıyor olmasının sağladığı bazı avantajlar şunlardır:

  • Ciddi derecede performansı arttırması
  • Responsive’liği arttırması
  • Güç tüketimini düşürmesi
  • Esnekliğe ve özelliştirmeye açık olması
  • LayoutManager kullanmasından ötürü dikey ve yatay scroll’u, Staggered List’i ve Grid’i desteklemesi.

Meyveler ile RecyclerView örneği

RecyclerView data ve view ile direkt olarak etkileşime girmez bunun yerine ViewHolder ile ilgilenir. ViewHolder RecyclerView içindeki tek bir view’i temsil eder. Bizim örneğimizde ViewHolder; aşağıda kodunu görebildiğimiz item_fruit view’ini temsil ediyor.

Adapter ise aldığı veriyi RecyclerView’de ekrana getirebilmek için hazırlar.

Veri kaynağını oluşturmak

Bu blog postunda RecyclerView kullanarak farklı meyve isimlerini ve görsellerini ekrana getireceğiz. Kompleks uygulamalarda verileriniz veritabanından veya API’dan gelebilir fakat bu örnekte localde ufak bir veri kaynağı oluşturup onu kullanacağız.

Veri kaynağımızı oluşturarak örneğimize başlayabiliriz. Fruit adında bir data classoluşturup constructor'ına birisi String tipinde fruitName birisi Int tipinde fruitImage olmak üzere iki parametre tanımlıyorum.

fruitImage'i Int tipinde tanımlamamın sebebi meyve resimlerini resource olarak almamızdan kaynaklanıyor.

Data class’ını oluşturduktan sonra verilerimi oluşturacağım FruitDatasource sınıfını oluşturuyorum. Burada Fruit tipindeki verileri liste içinde dönen bir fonksiyon tanımlayıp içine Fruit tipinde elemanlar ekliyorum.

Item layout’unu oluşturmak

Öncelikle RecyclerView’ın ekranda göstereceği viewlar için layout oluşturalım.

Verilerimizi tutacak view’ı oluşturduktan sonra activity_main.xmliçinde RecyclerView oluşturuyorum.

İtemleri tek boyutlu listede düzenlemek istediğimden app:layoutManager="androidx.recyclerview.widget.LinearLayoutManagerkullandım. Bunu istersem programmatically olarak MainActivity.kt içinde de yapabilirdim fakat ben layout dosyası içinde yapmayı tercih ediyorum. Örneğimizde RecyclerView'ı dikey olarak konumlandırıyoruz, yatay olarak konumlandırmış olsaydım android:orientation="horizontal" bu satırı yazmam yeterli olacaktı.

Eğer tek boyutlu bir liste yerine tek bir satırda birden fazla item bulundurmak isteseydim GridLayoutManager, itemlerimin boyutlarının birbirinden farklı, düzensiz bir şekilde gözükmesini isteseydim StaggeredGridLayoutManager kullanmam gerekirdi.

RecyclerView için Fruit Adapter’inin oluşturulması

Yazının başlarında ekranı scroll yaptığımız zaman kaybolan view yerine yenisinin nasıl geldiğine değinmiştik. Oluşturacağımız Adapter; veri setimizdeki Fruit’ları temsil edecek viewları sağlamadan sorumlu RecyclerView.Adapter'in subclass'ı olmalıdır. Bu sayede Adapter sınıfımıza onCreateViewHolder, onBindViewHolder ve getItemCount metotlarına ulaşabileceğiz.

İlk olarak FruitAdapter adında bir sınıf oluşturup RecyclerView.Adapterile extends ediyoruz.

Sıra ViewHoldersınıfını oluşturmaya geldi. FruitAdaptersınıfının içinde FruitViewHolderadında bir sınıf daha oluşturuyoruz. Bu sınıfı RecyclerView.ViewHolder ile extends ediyoruz.

Bu adımları tamamladıktan sonra onCreateViewHolder, onBindViewHolder ve getItemCount metotlarını override ediyoruz. CTRL + I kısayolunu kullanarak bu metotları kolayca override edebilirsiniz.

onCreateViewHolder

RecyclerView ne zaman yeni ViewHolder oluşturmaya ihtiyaç duyarsa o zaman onCreateViewHolder metodunu çağırır. Bu metot ViewHolder'ı oluşturur ve RecyclerView içinde verilerimiz için view'i inflate ve initialize eder.

onBindViewHolder

RecylerView bu metodu data ile ViewHolder’ı birleştirmek için çağırır. Bu metot uygun datayı çekip view holder layoutunu doldurur. Bizim örneğimizde, RecyclerView meyve isimlerini ve meyve fotoğraflarını ekrana getiriyor, bu metot ise veri kaynağından meyve ismini ve meyve fotoğrafını alarak ViewHolder’ın içinde bulunan fruitName ve fruitImage kısmını doldurur.

getItemCount

RecyclerView veri kaynağındaki veri sayısını alabilmek için bu metodu çağırır.

Adapter sınıfının son hali

MainActivity ile bağlama

Zorlu aşamaları tamamladıktan sonra geriye en kolay kısım yani RecyclerView’ı MainActivity ile bağlamak kaldı. Burada daha önce oluşturduğumuz veri kaynağını(FruitDatasource) fruitDatasource adında bir değişkene atıyorum. Daha sonra fruitRecyclerView adında bir değişken daha tanımlayıp RecyclerView'e eşitliyorum. fruitRecyclerView'ın adapterini de oluşturmuş olduğumuz FruitAdapter'e eşitleyerek activity kısmındaki işlerimizi tamamlıyoruz.

Şimdi kodu çalıştırıp nasıl gözüküyor bi’ bakalım

Gördüğünüz üzere kod sıkıntısız bir şekilde çalışıyor 👍.

Bu postta RecyclerView’e basitçe değinmeye çalıştım. Serinin diğer postlarında Grid ve Staggered List kullanma, item decorator, RecyclerView’de onClick işlemleri, item ekleme ve çıkarma, RecyclerView.adapter yerine ListAdapter kullanma, Data binding ve ViewBinding ile RecyclerView gibi konuları ele almaya çalışacağım. Umarım bu postu beğenmişsinizdir, diğer postlarda görüşmek üzere 👋.

--

--