Android Kotlin — setOnTouchListener для просмотра вторсырья и всех дочерних представлений элементов / все внутри

#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, выполните следующие действия.

ПЕРВЫЙ СЛУЧАЙ

  1. Создайте интерфейс
 internal interface OnCommentTouchListener{  fun onClick(comment: Comment, position: Int) //or wherever you want  }   
  1. Требуется экземпляр интерфейса в конструкторе адаптера
 class CommentAdapter internal constructor(val onClickListener: OnCommentTouchListener)   
  1. Примените его для holder.ItemView в onBindViewHolder или onBind(для ListAdapter)
 holder.itemView.setOnClickListener {  onClickListener.onClick(  comments.get(position),  position  )  }  
  1. Используйте этот адаптер в своем фрагменте/действии и переопределите onClick от вашего слушателя так, как вы хотите.

ВТОРОЙ СЛУЧАЙ

Если вы хотите сделать весь RecyclerView интерактивным элементом, попробуйте создать отдельный макет, включающий только RecyclerView. Как, например, FrameLayout с RecyclerView. Затем включите его lt;include layout=... /gt; в свой основной макет и дайте ему идентификатор. Все, что вам нужно сделать, это позвонить

 binding.frameLayoutId.root.setOnClickListener {...}