#android #android-recyclerview #android-view #android-touch-event
Вопрос:
Это и есть код:
binding.commentsRecyclerview.setOnTouchListener { view, _ -gt; Log.d(tagg, "touched") }
Это работает только тогда, когда я не касаюсь представления внутри элемента RecyclerView.
Итак, как я могу включить только все, что находится внутри RecyclerView?
Комментарии:
1. вам нужно определить setOnClickListener в onBind (), например, в вашем onBind =gt; holder.setOnClickListener(blaalal);
Ответ №1:
Я действительно не понимаю, хотите ли вы сделать весь вид RecyclerView кликабельным или сделать его элементы кликабельными. Поэтому я опишу оба решения ниже.
Если вам нужно создать сенсорный прослушиватель для элемента RecyclerView, выполните следующие действия.
ПЕРВЫЙ СЛУЧАЙ
- Создайте интерфейс
internal interface OnCommentTouchListener{ fun onClick(comment: Comment, position: Int) //or wherever you want }
- Требуется экземпляр интерфейса в конструкторе адаптера
class CommentAdapter internal constructor(val onClickListener: OnCommentTouchListener)
- Примените его для holder.ItemView в onBindViewHolder или onBind(для ListAdapter)
holder.itemView.setOnClickListener { onClickListener.onClick( comments.get(position), position ) }
- Используйте этот адаптер в своем фрагменте/действии и переопределите onClick от вашего слушателя так, как вы хотите.
ВТОРОЙ СЛУЧАЙ
Если вы хотите сделать весь RecyclerView интерактивным элементом, попробуйте создать отдельный макет, включающий только RecyclerView. Как, например, FrameLayout с RecyclerView. Затем включите его lt;include layout=... /gt;
в свой основной макет и дайте ему идентификатор. Все, что вам нужно сделать, это позвонить
binding.frameLayoutId.root.setOnClickListener {...}