我曾尝试在itemdecoration中添加一个点击监听器,如下所示,但仍然没有运气。请帮忙。
recyclerview.addOnItemTouchListener( object : RecyclerView.OnItemTouchListener{
override fun onTouchEvent(rv: RecyclerView?, e: MotionEvent?) {
}
override fun onInterceptTouchEvent(rv: RecyclerView?, e: MotionEvent?): Boolean {
val view = rv!!.findChildViewUnder(e!!.x, e!!.y)
if(view == null) return false
when(view.id){
R.id.list_item_section_text->{
Log.d("Clicked","Header")
}
}
return false
}
override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {
}
})
答案 0 :(得分:0)
ItemDecoration
将帮助您在项目之间绘制内容,但是您正在绘制的View
实际上是RecyclerView
本身(根据布局检查器),通过其{{1} }。因此,您将无法在该装饰上添加基本的Canvas
。
根据您的代码,我想您为每个项目标头都有一个项目装饰?
为此,我要做的不是将标头视为onClickListener
,而是将我的ItemDecoration
用作项(具有不同类型)。
RecyclerView
在适配器(包含项:sealed class RecyclerViewItem
object MainItem : RecyclerViewItem()
object Header : RecyclerViewItem()
)中,您将使用自定义ID覆盖RecyclerViewItem
方法。然后,在getItemViewType
中,您可以检查项目视图类型,并将onBindViewHolder
添加到视图中(如果它是onClickListener
)。
有关更多信息,您可以搜索使用不同项目类型构建RecyclerView 。