RecyclerView Click Events
Handle item clicks and long presses in RecyclerView, pass click listeners to adapters, and navigate to a detail screen on item tap.
Making List Items Clickable
RecyclerView doesn't have a built-in click listener like ListView did. You add click listeners inside the Adapter.
The recommended pattern: pass a lambda (callback) to the Adapter's constructor. When an item is tapped, the Adapter calls the lambda with the selected item — the Activity handles what happens next.
Adapter with Click Callback
Add an onItemClick lambda parameter to the 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
}All lessons in this course
- Kotlin Collections
- RecyclerView Basics
- RecyclerView Click Events
- SharedPreferences
- DataStore Preferences
- Adapters & DiffUtil