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)通用

用于视图的 Kotlin 合成扩展

Android Kotlin - 用于 RecyclerView 的 setOnTouchListener 和所有项目子视图/里面的所有内容

初识—Kotlin

初识—Kotlin