0Pricing
Android Academy · Lektion

Click-Ereignisse in RecyclerView

Behandeln Sie Klicks und lange Druckvorgänge auf Elementen in RecyclerView, übergeben Sie Click-Listener an Adapter und navigieren Sie beim Antippen eines Elements zu einem Detailbildschirm.

Click-Ereignisse in RecyclerView ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 6. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 6 Lektionen.

Listenelemente anklickbar machen

RecyclerView verfügt nicht wie ListView über einen integrierten Click Listener. Sie fügen Click Listener innerhalb des Adapters hinzu.

Das empfohlene Muster: Übergeben Sie dem Konstruktor des Adapters eine Lambda-Funktion (Callback). Wenn ein Element angetippt wird, ruft der Adapter die Lambda-Funktion mit dem ausgewählten Element auf – die Activity verarbeitet den nächsten Schritt.

Adapter mit Click-Callback

Fügen Sie dem Adapter einen Lambda-Parameter onItemClick hinzu:

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
}

Klicks in der Activity verarbeiten

Übergeben Sie in der Activity eine Lambda-Funktion, die zum Detailbildschirm navigiert:

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

Daten im Detailbildschirm empfangen

Lesen Sie die Extras in der Detail-Activity aus:

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

Effiziente Aktualisierungen mit DiffUtil

Wenn sich Ihre Listendaten ändern, rufen Sie nicht notifyDataSetChanged() auf – dadurch wird alles neu gezeichnet. Verwenden Sie stattdessen DiffUtil:

  • Berechnet die minimale Differenz zwischen alten und neuen Listen
  • Animiert nur die geänderten Elemente
  • Bessere Leistung und Benutzererfahrung

Die moderne Variante ist ListAdapter, das DiffUtil automatisch verwendet.

ListAdapter mit DiffUtil

Leiten Sie Ihren Adapter von ListAdapter ab, um automatische, animierte Listenaktualisierungen zu erhalten:

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

Neue Listen übermitteln

Aktualisieren Sie die Liste mit ListAdapter, indem Sie submitList() aufrufen. DiffUtil übernimmt die Animation 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

Langer Druck und Kontextmenüs

Sie können auch auf langes Drücken reagieren, indem Sie in onBindViewHolder setOnLongClickListener festlegen:

  • Geben Sie im Listener true zurück, um das Ereignis zu verarbeiten
  • Verwenden Sie die Funktion, um einen Dialog zum Löschen oder Bearbeiten anzuzeigen
  • Oder implementieren Sie das Löschen durch Wischen mit ItemTouchHelper

Elementdekorationen hinzufügen

Fügen Sie mit DividerItemDecoration eine visuelle Trennung zwischen Listenelementen hinzu:

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

Kurze Überprüfung

Wie werden Klicks auf Elemente in einem RecyclerView-Adapter empfohlen verarbeitet?

Zusammenfassung: RecyclerView-Klicks

Sie können nun interaktive Listen erstellen:

  • Übergeben Sie dem Konstruktor des Adapters einen Lambda-Callback
  • Rufen Sie in onBindViewHolder holder.itemView.setOnClickListener auf
  • Navigieren Sie zu einem Detailbildschirm, indem Sie Extras über ein Intent übergeben
  • Verwenden Sie ListAdapter und DiffUtil für reibungslose, animierte Aktualisierungen
  • Rufen Sie submitList() auf, um die angezeigten Daten zu aktualisieren

Als Nächstes: Daten lokal mit SharedPreferences speichern.

Häufig gestellte Fragen

Ist die Lektion „Click-Ereignisse in RecyclerView“ kostenlos?

Ja — der vollständige Text von „Click-Ereignisse in RecyclerView“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 6 Lektionen.

Was lerne ich in „Click-Ereignisse in RecyclerView“?

Behandeln Sie Klicks und lange Druckvorgänge auf Elementen in RecyclerView, übergeben Sie Click-Listener an Adapter und navigieren Sie beim Antippen eines Elements zu einem Detailbildschirm. Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Android Academy zu starten?

Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 6.

Wie lange dauert die Lektion „Click-Ereignisse in RecyclerView“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?

Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Kotlin-Collections
  2. Grundlagen von RecyclerView
  3. Click-Ereignisse in RecyclerView
  4. SharedPreferences
  5. DataStore Preferences
  6. Adapter und DiffUtil
← Zurück zu Android Academy