Klikgebeurtenissen in RecyclerView
Behandel klikken en lang indrukken op items in RecyclerView, geef kliklisteners door aan adapters en navigeer bij een tik op een item naar een detailscherm.
Klikgebeurtenissen in RecyclerView is een gratis Android Academy-les op CoddyKit. Dit is les 3 van 6. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Android Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Android Academy bevat in totaal 6 lessen.
Lijstitems aanklikbaar maken
RecyclerView heeft geen ingebouwde kliklistener zoals ListView die wel had. Je voegt kliklisteners toe in de Adapter.
Het aanbevolen patroon: geef een lambda (callback) door aan de constructor van de Adapter. Wanneer op een item wordt getikt, roept de Adapter de lambda aan met het geselecteerde item — de Activity bepaalt wat er daarna gebeurt.
Adapter met klikcallback
Voeg een lambda-parameter onItemClick toe aan de Adapter:
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
}Klikken afhandelen in de Activity
Geef in de Activity een lambda door die naar het detailscherm navigeert:
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)
}Gegevens ontvangen in het detailscherm
Lees de extra gegevens in de detail-Activity:
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 voor efficiënte updates
Wanneer je lijstgegevens veranderen, roep je niet notifyDataSetChanged() aan — daarmee wordt alles opnieuw getekend. Gebruik in plaats daarvan DiffUtil:
- Berekent het minimale verschil tussen oude en nieuwe lijsten
- Animeert alleen de gewijzigde items
- Betere prestaties en gebruikerservaring
De moderne manier is ListAdapter, dat DiffUtil automatisch gebruikt.
ListAdapter met DiffUtil
Breid ListAdapter uit voor automatische, geanimeerde lijstupdates:
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) }
}
}Nieuwe lijsten indienen
Werk met ListAdapter de lijst bij door submitList() aan te roepen. DiffUtil verzorgt de animatie automatisch:
// 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 changeLang indrukken en contextmenu's
Je kunt ook reageren op lang indrukken door setOnLongClickListener in onBindViewHolder in te stellen:
- Retourneer
truevanuit de listener om de gebeurtenis af te handelen - Gebruik dit om een dialoogvenster voor verwijderen of bewerken te tonen
- Of implementeer verwijderen door te vegen met
ItemTouchHelper
Itemdecoraties toevoegen
Voeg visuele scheidingen tussen lijstitems toe met DividerItemDecoration:
binding.recyclerView.apply {
adapter = fruitAdapter
layoutManager = LinearLayoutManager(this@MainActivity)
addItemDecoration(
DividerItemDecoration(
this@MainActivity,
DividerItemDecoration.VERTICAL
)
)
}Korte controle
Wat is de aanbevolen manier om itemklikken af te handelen in een RecyclerView Adapter?
Samenvatting: klikken in RecyclerView
Je kunt nu interactieve lijsten maken:
- Geef een lambda-callback door aan de constructor van de Adapter
- Roep in
onBindViewHolderholder.itemView.setOnClickListeneraan - Navigeer naar een detailscherm door extra gegevens via Intent door te geven
- Gebruik
ListAdapter+DiffUtilvoor soepele, geanimeerde updates - Roep
submitList()aan om de weergegeven gegevens bij te werken
Hierna: gegevens lokaal bewaren met SharedPreferences.
Leer Kotlin met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 36
- Lessen
- 152
Veelgestelde vragen
Is de les “Klikgebeurtenissen in RecyclerView” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Android Academy, waaronder “Klikgebeurtenissen in RecyclerView”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Android Academy bevat in totaal 6 lessen.
Wat leer ik in “Klikgebeurtenissen in RecyclerView”?
Behandel klikken en lang indrukken op items in RecyclerView, geef kliklisteners door aan adapters en navigeer bij een tik op een item naar een detailscherm. Je oefent met Android Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Android Academy te beginnen?
Ervaring vooraf is niet nodig. Android Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 6.
Hoe lang duurt de les “Klikgebeurtenissen in RecyclerView”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Android Academy?
Ja. Elke les over Android Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Kotlin-collecties
- De basis van RecyclerView
- Klikgebeurtenissen in RecyclerView
- SharedPreferences
- DataStore Preferences
- Adapters en DiffUtil