Android Academy · Pelajaran

Peristiwa Klik RecyclerView

Tangani klik item dan tekan lama di RecyclerView, teruskan pendengar klik ke adapter, lalu navigasikan ke layar detail saat item diketuk.

Pelajaran 3 dari 611 langkah

Peristiwa Klik RecyclerView adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 6. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 6 pelajaran total.

Membuat Item Daftar Dapat Diklik

RecyclerView tidak memiliki pemroses klik bawaan seperti yang dimiliki ListView. Anda menambahkan pemroses klik di dalam Adaptor.

Pola yang disarankan: teruskan lambda (panggilan balik) ke konstruktor Adaptor. Saat item diketuk, Adaptor memanggil lambda dengan item yang dipilih — Activity menangani tindakan selanjutnya.

Adaptor dengan Panggilan Balik Klik

Tambahkan parameter lambda onItemClick ke Adaptor:

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
}

Menangani Klik di Activity

Di Activity, teruskan lambda yang menavigasi ke layar detail:

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)
}

Menerima Data di Layar Detail

Baca ekstra di Activity detail:

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"
    }
}

DiffUtil untuk Pembaruan Efisien

Saat data daftar berubah, jangan panggil notifyDataSetChanged() — tindakan itu menggambar ulang semuanya. Gunakan DiffUtil sebagai gantinya:

  • Menghitung perbedaan minimal antara daftar lama dan baru
  • Menganimasikan hanya item yang berubah
  • Kinerja dan UX yang lebih baik

Cara modernnya adalah ListAdapter yang menggunakan DiffUtil secara otomatis.

ListAdapter dengan DiffUtil

Perluas ListAdapter untuk pembaruan daftar otomatis dengan animasi:

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) }
    }
}

Mengirimkan Daftar Baru

Dengan ListAdapter, perbarui daftar dengan memanggil submitList(). DiffUtil menangani animasinya secara otomatis:

// 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

Tekan Lama & Menu Konteks

Anda juga dapat merespons tekanan lama dengan menetapkan setOnLongClickListener di onBindViewHolder:

  • Kembalikan true dari pemroses untuk menggunakan peristiwa tersebut
  • Gunakan untuk menampilkan dialog hapus/edit
  • Atau terapkan geser untuk menghapus dengan ItemTouchHelper

Menambahkan Dekorasi Item

Tambahkan pemisah visual di antara item daftar dengan DividerItemDecoration:

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

Pemeriksaan Singkat

Apa cara yang disarankan untuk menangani klik item dalam Adaptor RecyclerView?

Ringkasan: Klik RecyclerView

Sekarang Anda dapat membuat daftar interaktif:

  • Teruskan panggilan balik lambda ke konstruktor Adaptor
  • Di onBindViewHolder, panggil holder.itemView.setOnClickListener
  • Navigasikan ke layar detail dengan meneruskan ekstra melalui Intent
  • Gunakan ListAdapter + DiffUtil untuk pembaruan yang lancar dan beranimasi
  • Panggil submitList() untuk memperbarui data yang ditampilkan

Berikutnya: simpan data secara lokal dengan SharedPreferences.

Gratis untuk memulai

Belajar Kotlin dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
36
Pelajaran
152

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Peristiwa Klik RecyclerView” gratis?

Ya — teks lengkap “Peristiwa Klik RecyclerView” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 6 pelajaran total.

Apa yang akan aku pelajari di “Peristiwa Klik RecyclerView”?

Tangani klik item dan tekan lama di RecyclerView, teruskan pendengar klik ke adapter, lalu navigasikan ke layar detail saat item diketuk. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Android Academy?

Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 6.

Berapa lama pelajaran “Peristiwa Klik RecyclerView” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?

Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Koleksi Kotlin
  2. Dasar RecyclerView
  3. Peristiwa Klik RecyclerView
  4. SharedPreferences
  5. Preferensi DataStore
  6. Adapter & DiffUtil
← Kembali ke Android Academy