Android’de RecyclerView ve Adapter Kullanımı

Yusuf MENDES
4 min readAug 16, 2023

--

Merhaba rkadaşlar bu yazımda sizlere Android programlamada en çok kullanılan konulardan biri olan RecyclerView ve Adapter kullanımını anlatmaya çalışacağım. Şimdiden iyi okumalar 😊

RecyclerView Nedir?

RecyclerView, verilerimizi listelememize yarıyan yapılardır. Verileri listelemek için Adapter yapısı kullanırız. RecyclerView, verilerimizi listeledikten sonra listemiz üzerinde scroll(kaydırma) işlemi yapmamızı sağlar.

RecyclerView’i oluşturmak ve kullanmak için bazı kullanmamız gereken yapılar vardır. Bunlar;

  • Adapter
  • ViewHolder
  • LayoutManager

1- Adapter

Adapter verilerimizi recyclerView’a bağlayan yapıdır.

2- ViewHolder

Item’larda kullandığımız viewlerin (textView, ImageView vb.) tanımlandığı yapıdır.

3- LayoutManager

Item’lerin listedeki konumu ayarladığımız yapıdır. 3 çeşit LayoutManager yapısı vardır.

  • LinearlayoutManager -> itemleri alt alta sıralar.
  • GridLayoutManager -> itemlerin satır ve sütun şeklinde görülmesini sağlayan yapıdır.
  • StaggeredGridLayoutManager -> itemlerin satır ve sütunlarda kademeli şekilde görünmesini sağlayan yapıdır.

RecyclerView içinde verilerimizi listelemek için item için bir tasarım yapmalıyız. Tasarım yapmak için res klasörü içinde bulunan layout kısmından “Layout Resource File” açmalıyız.

  • Layout Resource File açtıktan sonra item için tasarım yapmaya başlayacağız. Tasarımımızda bir tane TextView olsun ve Text view içinde ülkelerin isimlerini gösterelim.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="vertical">

<androidx.cardview.widget.CardView
android:id="@+id/satirCardView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
app:contentPadding="10dp">

<TextView
android:id="@+id/satirYazi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text"
android:textColor="@color/red"
android:textSize="24sp"
android:textStyle="bold"/>

</androidx.cardview.widget.CardView>

</LinearLayout>
  • Tasarım yaptıktan sonra activity_main_xml içinde RecyclerView ekleyelim.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/card_tasarim" />
</androidx.constraintlayout.widget.ConstraintLayout>
  • RecyclerView kısmını da ekledikten sonra kodlama kısmına geçelim.
  • Adapter sınıfımızı oluşturalım. Sınıfımızı oluşturduktan sonra kodlama yapmaya başlayabiliriz.
class RVAdapter(private val ulkeList: List<Ulkeler>) :
RecyclerView.Adapter<RVAdapter.CardViewHolder>() {


inner class CardViewHolder(val binding:CardTasarimBinding) : RecyclerView.ViewHolder(binding.root)

//cardView tasarım sınfından bir nesne bekleniyor
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardViewHolder {
val binding = CardTasarimBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return CardViewHolder(binding)
}

// listede kaç item olacağını belirttiğimiz fonksiyon
override fun getItemCount(): Int {
return ulkeList.size
}

// Değer atamalarının yapıldığı fonksiyon
override fun onBindViewHolder(holder: CardViewHolder, position: Int) {
val ulke = ulkeList[position]
val binding = holder.binding
binding.satirYazi.text = ulke.ulkeAdi

Not: Adapter sınıfında kullandığımız binding işlemi için build.gradle(app) kısmına viewBinding eklemeniz gerekmektedir. ViewBinding 2 şekilde tanımlanabilir.

//1.yöntem
viewBinding{
enabled = true
}

//2.yöntem
buildFeatures{
viewBinding = true
}
  • Adapter sınıfımız tamamladık şimdi de bir tane data class oluşturalım. Data class’ımız içinde ülkelerin adını tutan bir değişken tanımlayalım.
data class Ulkeler{
var ulkeAdi: String
)
  • Data class’ımızı da oluşturduktan sonra MainActivity.kt class’ımıza gelelim ve son kodlamalarımızı yapalım.
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.recyclerviewkullanimi.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
// binding tanımlama
private lateinit var binding: ActivityMainBinding
// adapter tanımlama
private lateinit var rvAdapter: RVAdapter
// liste tanımlama
private lateinit var ulkelerListesi: ArrayList<Ulkeler>

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//binding bağlama işlemi
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)

binding.rv.setHasFixedSize(true)
/*
* binding.rv.layoutManager = LinearLayoutManager(this) -> listedeki item'ler alt alta gösterilir
* binding.rv.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL) -> yan yana 2 item olacak ve aşağı(dikey) doğru kayma yapılır
* binding.rv.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL) -> alt alta 2 item olacak ve yana(yatay) doğru kayma yapılır
* */

binding.rv.layoutManager = LinearLayoutManager(this)
addData()

}

// listemize veri ekleme fonksiyonu
private fun addData() {
val u1 = Ulkeler(1, "Türkiye")
val u2 = Ulkeler(2, "Fransa")
val u3 = Ulkeler(3, "Rusya")
val u4 = Ulkeler(4, "Almanya")
val u5 = Ulkeler(5, "Malta")
val u6 = Ulkeler(6, "İtalya")
val u7 = Ulkeler(7, "İngiltere")
val u8 = Ulkeler(8, "İsviçre")
val u9 = Ulkeler(9, "Danimarka")

ulkelerListesi = ArrayList<Ulkeler>()

ulkelerListesi.add(u1)
ulkelerListesi.add(u2)
ulkelerListesi.add(u3)
ulkelerListesi.add(u4)
ulkelerListesi.add(u5)
ulkelerListesi.add(u6)
ulkelerListesi.add(u7)
ulkelerListesi.add(u8)
ulkelerListesi.add(u9)

// listemizi adapter class'ına gönderme işlemi
rvAdapter = RVAdapter(ulkelerListesi)
// adapter sınıfımıza gönderdiğimiz verileri recyclerview içinde gösterme işlemi
binding.rv.adapter = rvAdapter

}
}
  • Örneğimizi tamamladık. Şimdi ekran çıktısını görelim.

Android’de en çok kullanılan konulardan biri olan recyclerView ve Adapter konusunu anlatmaya çalıştığım yazımın sonuna geldik. Yazımı okuduğunuz için teşekkürler😊 Bir sonraki yazımda görüşmek üzere👋 İyi çalışmalar.

--

--