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 changeLanger Druck und Kontextmenüs
Sie können auch auf langes Drücken reagieren, indem Sie in onBindViewHolder setOnLongClickListener festlegen:
- Geben Sie im Listener
truezurü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
onBindViewHolderholder.itemView.setOnClickListenerauf - Navigieren Sie zu einem Detailbildschirm, indem Sie Extras über ein Intent übergeben
- Verwenden Sie
ListAdapterundDiffUtilfü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
- Kotlin-Collections
- Grundlagen von RecyclerView
- Click-Ereignisse in RecyclerView
- SharedPreferences
- DataStore Preferences
- Adapter und DiffUtil