0Pricing
Android Academy · Ders

RecyclerView Tıklama Olayları

RecyclerView içinde öğe tıklamalarını ve uzun basmaları yönetin, tıklama dinleyicilerini adaptörlere aktarın ve öğeye dokunulduğunda ayrıntı ekranına geçiş yapın.

RecyclerView Tıklama Olayları, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 6 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 6 dersten oluşur.

Liste Öğelerini Tıklanabilir Yapma

RecyclerView'ın ListView gibi yerleşik bir tıklama dinleyicisi yoktur. Tıklama dinleyicilerini Adapter'ın içine eklersiniz.

Önerilen yöntem: Adapter'ın oluşturucusuna bir lambda (geri çağırma) iletin. Bir öğeye dokunulduğunda Adapter, seçilen öğeyle birlikte lambda'yı çağırır — bundan sonra ne olacağını Activity yönetir.

Tıklama Geri Çağırmalı Adapter

Adapter'a bir onItemClick lambda parametresi ekleyin:

class FruitAdapter(
    private val fruits: List<Fruit>,
    private val onItemClick: (Fruit) -> Unit
) : RecyclerView.Adapter<FruitAdapter.ViewHolder>() {

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val tvName: TextView = view.findViewById(R.id.tvName)
        val tvCalories: TextView = view.findViewById(R.id.tvCalories)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_fruit, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fruit = fruits[position]
        holder.tvName.text = fruit.name
        holder.tvCalories.text = "${fruit.calories} kcal"
        // Set click listener on the whole item
        holder.itemView.setOnClickListener {
            onItemClick(fruit)
        }
    }

    override fun getItemCount() = fruits.size
}

Activity'de Tıklamaları Yönetme

Activity'de ayrıntı ekranına geçiş yapan bir lambda iletin:

val adapter = FruitAdapter(fruits) { fruit ->
    // Called when user taps a fruit
    val intent = Intent(this, FruitDetailActivity::class.java)
    intent.putExtra("FRUIT_NAME", fruit.name)
    intent.putExtra("FRUIT_CALORIES", fruit.calories)
    startActivity(intent)
}

binding.recyclerView.apply {
    this.adapter = adapter
    layoutManager = LinearLayoutManager(this@MainActivity)
}

Ayrıntı Ekranında Veri Alma

Ayrıntı Activity'sindeki ek verileri okuyun:

class FruitDetailActivity : AppCompatActivity() {

    private lateinit var binding: ActivityFruitDetailBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityFruitDetailBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val name = intent.getStringExtra("FRUIT_NAME") ?: "Unknown"
        val calories = intent.getIntExtra("FRUIT_CALORIES", 0)

        binding.tvDetailName.text = name
        binding.tvDetailCalories.text = "$calories kcal"
    }
}

Verimli Güncellemeler için DiffUtil

Liste verileriniz değiştiğinde notifyDataSetChanged() çağırmayın — bu işlem her şeyi yeniden çizer. Bunun yerine DiffUtil kullanın:

  • Eski ve yeni listeler arasındaki en küçük farkı hesaplar
  • Yalnızca değişen öğeleri canlandırır
  • Daha iyi performans ve kullanıcı deneyimi sağlar

Modern yöntem, DiffUtil'ı otomatik olarak kullanan ListAdapter kullanmaktır.

DiffUtil ile ListAdapter

Otomatik ve canlandırılmış liste güncellemeleri için ListAdapter'ı genişletin:

class FruitAdapter(
    private val onItemClick: (Fruit) -> Unit
) : ListAdapter<Fruit, FruitAdapter.ViewHolder>(DIFF_CALLBACK) {

    companion object {
        val DIFF_CALLBACK = object : DiffUtil.ItemCallback<Fruit>() {
            override fun areItemsTheSame(old: Fruit, new: Fruit) =
                old.name == new.name
            override fun areContentsTheSame(old: Fruit, new: Fruit) =
                old == new  // data class equals()
        }
    }

    // ... ViewHolder and onCreateViewHolder same as before ...

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fruit = getItem(position)  // use getItem(), not fruits[position]
        holder.tvName.text = fruit.name
        holder.itemView.setOnClickListener { onItemClick(fruit) }
    }
}

Yeni Listeleri Gönderme

ListAdapter ile listeyi submitList() çağırarak güncelleyin. DiffUtil canlandırmayı otomatik olarak yönetir:

// In Activity:
val adapter = FruitAdapter { fruit ->
    // handle click
}
binding.recyclerView.adapter = adapter

// Initial data
adapter.submitList(fruits)

// Later, update with new data (e.g. after filtering):
val filtered = fruits.filter { it.calories < 100 }
adapter.submitList(filtered)  // DiffUtil animates the change

Uzun Basma ve Bağlam Menüler

onBindViewHolder içinde setOnLongClickListener ayarlayarak uzun basmalara da yanıt verebilirsiniz:

  • Olayı tüketmek için dinleyiciden true döndürün
  • Silme/düzenleme iletişim kutusu göstermek için kullanın
  • Ya da ItemTouchHelper ile kaydırarak silme özelliğini uygulayın

Öğe Süslemeleri Ekleme

DividerItemDecoration ile liste öğeleri arasına görsel ayırıcı ekleyin:

binding.recyclerView.apply {
    adapter = fruitAdapter
    layoutManager = LinearLayoutManager(this@MainActivity)
    addItemDecoration(
        DividerItemDecoration(
            this@MainActivity,
            DividerItemDecoration.VERTICAL
        )
    )
}

Hızlı Kontrol

RecyclerView Adapter'ında öğe tıklamalarını yönetmenin önerilen yolu nedir?

Özet: RecyclerView Tıklamaları

Artık etkileşimli listeler oluşturabilirsiniz:

  • Adapter oluşturucusuna bir lambda geri çağırması iletin
  • onBindViewHolder içinde holder.itemView.setOnClickListener çağırın
  • Intent aracılığıyla ek veriler ileterek ayrıntı ekranına geçin
  • Sorunsuz ve canlandırılmış güncellemeler için ListAdapter + DiffUtil kullanın
  • Görüntülenen verileri güncellemek için submitList() çağırın

Sonraki konu: verileri SharedPreferences ile yerel olarak kalıcı hâle getirme.

Sıkça Sorulan Sorular

“RecyclerView Tıklama Olayları” dersi ücretsiz mi?

Evet — “RecyclerView Tıklama Olayları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 6 dersten oluşur.

“RecyclerView Tıklama Olayları” dersinde ne öğreneceğim?

RecyclerView içinde öğe tıklamalarını ve uzun basmaları yönetin, tıklama dinleyicilerini adaptörlere aktarın ve öğeye dokunulduğunda ayrıntı ekranına geçiş yapın. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Android Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 6 dersinin 3. dersidir.

“RecyclerView Tıklama Olayları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Kotlin Koleksiyonları
  2. RecyclerView Temelleri
  3. RecyclerView Tıklama Olayları
  4. SharedPreferences
  5. DataStore Tercihleri
  6. Adaptörler ve DiffUtil
← Android Academy Sayfasına Dön