仅在ViewHolder中单击侦听器有时会作出响应

我有以下一段代码。 下面你可以看到我的视图,适配器和我的XML。 我遇到的问题是点击有时不被执行。 只有当我也设置clicklisteners在我的viewholder textview和imageview比它的工作。 据推测,点击被textview和imageview吃掉。 任何人都知道为什么会出现这种情况。

class GeneralListItemViewHolder(val view: View) : RecyclerView.ViewHolder(view) { var item: GeneralItemViewModel? = null init { view.setOnClickListener { item?.method?.invoke() } } fun bind(item: GeneralItemViewModel) { this.item = item //Do some nice UI things } } 

我的xml看起来像这样:

     

此外我的适配器代码包含以下内容:

 class GeneralItemAdapter(val items: List) : RecyclerView.Adapter() { override fun onBindViewHolder(holder: GeneralListItemViewHolder, position: Int) { return holder.bind(getItem(position)) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GeneralListItemViewHolder { val view = parent.inflate(R.layout.general_list_item, false) return GeneralListItemViewHolder(view) } override fun getItemCount(): Int { return items.size } private fun getItem(position: Int): GeneralItemViewModel { return items[position] } } 

您必须在绑定方法中设置ClickListener。

实际上,这个问题与在视图上使用合成kotlin扩展有关。 如果你在variables视图而不是itemView上使用它们,那么点击就会被textview所吃掉。

 fun bind(item: AboutGeneralItemViewModel) { this.item = item itemView.general_list_item_title.text = item.value itemView.setOnClickListener { item?.method?.invoke() } }