Android Kotlin - RecyclerView 的 setOnTouchListener 和所有项目子视图/里面的所有内容
Android Kotlin - setOnTouchListener for RecyclerView and all item child Views / everything inside
这是代码:
binding.commentsRecyclerview.setOnTouchListener { view, _ ->
Log.d(tagg, "touched")
}
它仅在我不触摸 RecyclerView 项目内的视图时才有效。
那么我怎样才能只包含 RecyclerView 中的所有内容?
我不太明白你是想让整个 recyclerView 视图都可以点击还是让它的项目可以点击。所以我在下面描述了这两种解决方案。
如果您需要为 recyclerView 项目创建触摸侦听器,请执行以下步骤。
第一个案例
- 创建界面
internal interface OnCommentTouchListener{
fun onClick(comment: Comment, position: Int) //or wherever you want
}
- 在您的适配器构造函数中需要一个接口实例
class CommentAdapter internal constructor(val onClickListener: OnCommentTouchListener)
- 在 onBindViewHolder 或 onBind 中为 holder.itemView 应用它(对于 ListAdapter)
holder.itemView.setOnClickListener {
onClickListener.onClick(
comments.get(position),
position
)
}
- 在您的 Fragment/Activity 中使用此适配器,并按照您想要的方式覆盖监听器的 onClick。
第二个案例
如果你想让整个 RecyclerView 成为一个可点击的项目,尝试做一个单独的布局,只包含 RecyclerView。例如,带有 RecyclerView 的 FrameLayout。然后包括它
<include layout=... />
在你的主布局中并给它一个 id。然后你所要做的就是打电话
binding.frameLayoutId.root.setOnClickListener {...}
这是代码:
binding.commentsRecyclerview.setOnTouchListener { view, _ ->
Log.d(tagg, "touched")
}
它仅在我不触摸 RecyclerView 项目内的视图时才有效。
那么我怎样才能只包含 RecyclerView 中的所有内容?
我不太明白你是想让整个 recyclerView 视图都可以点击还是让它的项目可以点击。所以我在下面描述了这两种解决方案。
如果您需要为 recyclerView 项目创建触摸侦听器,请执行以下步骤。
第一个案例
- 创建界面
internal interface OnCommentTouchListener{
fun onClick(comment: Comment, position: Int) //or wherever you want
}
- 在您的适配器构造函数中需要一个接口实例
class CommentAdapter internal constructor(val onClickListener: OnCommentTouchListener)
- 在 onBindViewHolder 或 onBind 中为 holder.itemView 应用它(对于 ListAdapter)
holder.itemView.setOnClickListener {
onClickListener.onClick(
comments.get(position),
position
)
}
- 在您的 Fragment/Activity 中使用此适配器,并按照您想要的方式覆盖监听器的 onClick。
第二个案例
如果你想让整个 RecyclerView 成为一个可点击的项目,尝试做一个单独的布局,只包含 RecyclerView。例如,带有 RecyclerView 的 FrameLayout。然后包括它
<include layout=... />
在你的主布局中并给它一个 id。然后你所要做的就是打电话
binding.frameLayoutId.root.setOnClickListener {...}