Android Kotlin - 用于 RecyclerView 的 setOnTouchListener 和所有项目子视图/里面的所有内容
Posted
技术标签:
【中文标题】Android Kotlin - 用于 RecyclerView 的 setOnTouchListener 和所有项目子视图/里面的所有内容【英文标题】:Android Kotlin - setOnTouchListener for RecyclerView and all item child Views / everything inside 【发布时间】:2021-12-25 03:29:37 【问题描述】:这是代码:
binding.commentsRecyclerview.setOnTouchListener view, _ ->
Log.d(tagg, "touched")
它仅在我不触摸 RecyclerView 项目内的视图时才有效。
那么我怎样才能只包含 RecyclerView 中的所有内容呢?
【问题讨论】:
你需要定义 setOnClickListener insde onBInd() 例如在你的 onBind => 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)
-
将其应用于 onBindViewHolder 或 onBind(for ListAdapter) 中的 holder.itemView
holder.itemView.setOnClickListener
onClickListener.onClick(
comments.get(position),
position
)
-
在您的 Fragment/Activity 中使用此适配器,并以您想要的方式覆盖侦听器的 onClick。
第二种情况
如果您想让整个 RecyclerView 成为可点击的项目,请尝试制作一个单独的布局,其中仅包含 RecyclerView。例如,FrameLayout 和 RecyclerView。然后包括它
<include layout=... />
在你的主布局中并给它一个 id。那么你所要做的就是打电话
binding.frameLayoutId.root.setOnClickListener ...
【讨论】:
以上是关于Android Kotlin - 用于 RecyclerView 的 setOnTouchListener 和所有项目子视图/里面的所有内容的主要内容,如果未能解决你的问题,请参考以下文章
Android中用于kotlin的静态等价物,以避免处理程序内存泄漏
Android:如何使 Kotlin 中所有对象列表的类型转换器(用于 Room)通用
Android Kotlin - 用于 RecyclerView 的 setOnTouchListener 和所有项目子视图/里面的所有内容