My simple solution using higher-order function and let
scoping function to set listener only if itemAction
has been set
// Adapter
private var itemAction: ((Item) -> Unit)? = null
fun setItemAction(action: (Item) -> Unit) {
this.itemAction = action
}
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun setItem(item: Item) {
// ...
itemAction?.let {
itemView.setOnClickListener { it(item) }
}
}
}
and in activity/fragment
adapter.setItemAction { // <- it is Item
// do something with it
}