Хорошим решением для обработки щелчков элементов адаптера является передача их в действие или фрагмент, который их создал.
С kotlin вы можете использовать определение функции вместо интерфейса для этой простой работы,поэтому внутри вашего класса адаптера добавьте var
типа функции:
private var listener: ((item: DataClass) -> Unit)? = null
fun setOnItemClickListener(listener: (item: DataClass) -> Unit) {
this.listener = listener
}
И внутри класса ViewHolder
установите слушателя, как показано ниже:
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
init {
itemView.btn_save.setOnClickListener { listener?.invoke(data[adapterPosition]) }
}
// ...
}
Наконец внутрик вашей деятельности или фрагменту вы можете легко получить доступ к элементам, добавив нового слушателя:
adapter.setOnItemClickListener { it -> TODO() }
Обратите внимание, что установка слушателей внутри конструктора ViewHolder
(init
) более эффективна, так как нет необходимости устанавливатьслушатель для каждой привязки данных.