← Ana Sayfaya Dön

Andoridde RecyclerView Kullanımı

Kategori: Android30 Ocak 2025

RecyclerView Kullanımı

RecyclerView, Android'de liste veya ızgara (grid) şeklinde veri göstermek için kullanılan bir bileşendir.

  • Büyük listeleri daha verimli göstermek için (Bellek tasarrufu yapar).
  • Daha esnek ve özelleştirilebilir.
  • Eski ListView'den daha gelişmiş ve hızlıdır.

Layout Kısmı

İlk olarak RecyclerView'i layouta ekleyelim.

Blog Resmi

Ardından bir xml dosyası oluşturup recyclerView için bir adet textView ekleyelim.

Blog Resmi

Ardından da görüntülemek istediğimiz asıl bilgi sayfasını oluşturup layouta ekleyelim.

Blog Resmi

Kotlin Kısmı

İlk olarak view binding'i import etmeyi unutmamalıyız.

Şimdi bir adet SuperKahraman adında bir sınıf oluşturup içine isim, meslek, gorsel değişkenlerini ekleyelim.

package com.example.superkahramankitabi import java.io.Serializable class SuperKahraman(val isim : String, val meslek: String, val gorsel: Int) : Serializable{ }

Not: Serializable sınıfından niçin kalıtım aldığımızı daha sonra göreceğiz.

Not: gorsel değişkeni int olarak tanımlandı çünkü drawable resimleri hafızada int değerlere atıyor.

Şimdi MainActivity kısmına geçelim.

MainActivity Kısmı

Bir adet superKahramanListesi adında ArrayList oluşturalım, içeriğini daha sonra dolduracağız.

private lateinit var superKahramanListesi : ArrayList<SuperKahraman>

Şimdi onCreate fonksiyonunda superKahramanListesi'ne 4 adet SuperKahraman ekleyelim.

val superman = SuperKahraman("SuperMan","Gazeteci",R.drawable.superman) val batman = SuperKahraman("BatMan","Patron",R.drawable.batman) val ironman = SuperKahraman("IronMan","Zengin :D", R.drawable.ironman) val spiderman= SuperKahraman("SpiderMan","Fotoğrafçı",R.drawable.spiderman) // Şimdi bu nesneleri arrayList'e ekleyelim. superKahramanListesi = arrayListOf(superman,batman,ironman,spiderman)

Adapter Kısmı

SuperKahramanAdapter adında bir sınıf oluşturup içine superKahramanListesi'ni ekleyelim.

Not: Gerekli importları unutmamalıyız. Alt + Enter kombinasyonu ile import edebiliriz.

class SuperKahramanAdapter(val SuperKahramanListesi: ArrayList<SuperKahraman>): RecyclerView.Adapter<SuperKahramanAdapter.SuperKahramanViewHolder>() { class SuperKahramanViewHolder(val binding: RecyclerRowBinding) : RecyclerView.ViewHolder(binding.root){ } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SuperKahramanViewHolder { val binding = RecyclerRowBinding.inflate(LayoutInflater.from(parent.context),parent,false) return SuperKahramanViewHolder(binding) } override fun getItemCount(): Int { return SuperKahramanListesi.size } override fun onBindViewHolder(holder: SuperKahramanViewHolder, position: Int) { holder.binding.textViewRecyclerView.text= SuperKahramanListesi[position].isim holder.itemView.setOnClickListener { val intent = Intent(holder.itemView.context, TanitimAktivitesi::class.java) intent.putExtra("secilenKahraman", SuperKahramanListesi[position]) holder.itemView.context.startActivity(intent) } } }

Not: intent içinde this yerine holder.itemView.context kullanmalıyız.

Not: startactivity(intent) yerine holder.itemView.context.startActivity(intent) kullanmalıyız.

Şimdi MainActivity'e geri dönüp adapter'ı bağlayalım.

val adapter = SuperKahramanAdapter(superKahramanListesi) binding.RecyclerView.layoutManager = LinearLayoutManager(this) binding.RecyclerView.adapter= adapter

Not: LinearLayoutManager ile liste görünümü yapıyoruz. Eğer ızgara görünümü istiyorsak GridLayoutManager kullanmalıyız.

Tanıtım Aktivitesi Kısmı

Tanıtım Aktivitesi sınıfını oluşturup bunun için de ayrı bir view binding tanımlaması yapıyoruz.

Ardından adapter kısmını tanıtım aktivitesi'ne bağlıyoruz.

val secilenKahraman = adapterdenGelenIntent.getSerializableExtra("secilenKahraman") as SuperKahraman

Not: Bu kullanım ileride kalkacak, yerini şu kullanıma bıracak.

val secilenKahraman = adapterdenGelenIntent.getSerializableExtra("secilenKahraman",SuperKahraman::class.java)

Not: Bu kullanım şu an için sadece API 33 ve üstünde çalışıyor.

Son olarak da resim, isim ve meslek değişkenlerini bağlıyoruz.

binding.imageView.setImageResource(secilenKahraman.gorsel) binding.textView.text= secilenKahraman.isim binding.textView2.text= secilenKahraman.meslek

Şu anda uygulamamız şu şekilde görünüyor ve çalışıyor:

Blog Resmi

İlgili süper kahramanı seçtiğimizde şu şekilde görünüyor:

Blog Resmi

Singleton Kullanımı

Son olarak da singleton kullanımını görelim.

Singleton, tek bir nesne oluşturup her yerde bu nesneyi kullanmak için kullanılır.

Eğer bu projede singleton kullanmak isteseydik:

  • Öncelikle MySingleton adında bir object oluşturuyoruz.
object MySingleton { var secilenSuperKahraman : SuperKahraman ?= null }
  • Sonrasında superKahramanAdapter sınıfında
intent.putExtra("secilenKahraman", SuperKahramanListesi[position])

satırı yerine

MySingleton.secilenSuperKahraman=SuperKahramanListesi[position]

satırını eklememiz gerekiyor.

  • Ardından da Tanıtım Aktivitesi'nde
val secilenKahraman = adapterdenGelenIntent.getSerializableExtra("secilenKahraman") as SuperKahraman binding.imageView.setImageResource(secilenKahraman.gorsel) binding.textView.text= secilenKahraman.isim binding.textView2.text= secilenKahraman.meslek

kısmı yerine

val secilenKahraman= MySingleton.secilenSuperKahraman secilenKahraman?.let { binding.imageView.setImageResource(secilenKahraman.gorsel) binding.textView.text= secilenKahraman.isim binding.textView2.text= secilenKahraman.meslek }

yazmamız gerekiyordu.

Not: let ile Nullable kontrolü yapıyoruz çünkü secilenKahraman null olabilir.