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 项目创建触摸侦听器,请执行以下步骤。

第一个案例

  1. 创建界面
    internal interface OnCommentTouchListener{
        fun onClick(comment: Comment, position: Int) //or wherever you want
    }

  1. 在您的适配器构造函数中需要一个接口实例
class CommentAdapter internal constructor(val onClickListener: OnCommentTouchListener) 
  1. 在 onBindViewHolder 或 onBind 中为 holder.itemView 应用它(对于 ListAdapter)
       holder.itemView.setOnClickListener {
            onClickListener.onClick(
                comments.get(position),
                position
            )
        }
  1. 在您的 Fragment/Activity 中使用此适配器,并按照您想要的方式覆盖监听器的 onClick。

第二个案例

如果你想让整个 RecyclerView 成为一个可点击的项目,尝试做一个单独的布局,只包含 RecyclerView。例如,带有 RecyclerView 的 FrameLayout。然后包括它 <include layout=... /> 在你的主布局中并给它一个 id。然后你所要做的就是打电话

binding.frameLayoutId.root.setOnClickListener {...}