Peristiwa Klik RecyclerView
Tangani klik item dan tekan lama di RecyclerView, teruskan pendengar klik ke adapter, lalu navigasikan ke layar detail saat item diketuk.
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 changeTekan Lama & Menu Konteks
Anda juga dapat merespons tekanan lama dengan menetapkan setOnLongClickListener di onBindViewHolder:
- Kembalikan
truedari 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, panggilholder.itemView.setOnClickListener - Navigasikan ke layar detail dengan meneruskan ekstra melalui Intent
- Gunakan
ListAdapter+DiffUtiluntuk pembaruan yang lancar dan beranimasi - Panggil
submitList()untuk memperbarui data yang ditampilkan
Berikutnya: simpan data secara lokal dengan SharedPreferences.
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
- Koleksi Kotlin
- Dasar RecyclerView
- Peristiwa Klik RecyclerView
- SharedPreferences
- Preferensi DataStore
- Adapter & DiffUtil