Android Academy · Les

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.

Les 3 van 611 stappen

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 change

Lang indrukken en contextmenu's

Je kunt ook reageren op lang indrukken door setOnLongClickListener in onBindViewHolder in te stellen:

  • Retourneer true vanuit 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 onBindViewHolder holder.itemView.setOnClickListener aan
  • Navigeer naar een detailscherm door extra gegevens via Intent door te geven
  • Gebruik ListAdapter + DiffUtil voor soepele, geanimeerde updates
  • Roep submitList() aan om de weergegeven gegevens bij te werken

Hierna: gegevens lokaal bewaren met SharedPreferences.

Gratis beginnen

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

  1. Kotlin-collecties
  2. De basis van RecyclerView
  3. Klikgebeurtenissen in RecyclerView
  4. SharedPreferences
  5. DataStore Preferences
  6. Adapters en DiffUtil
← Terug naar Android Academy