【问题标题】:RecyclerView.OnItemClickListener versus Implementing onClickListener in the viewholder of a recyclerView?RecyclerView.OnItemClickListener 与在 recyclerView 的视图中实现 onClickListener?
【发布时间】:2018-02-24 09:56:22
【问题描述】:

使用 RecyclerView.OnItemClickListener 比在 recyclerView 的视图中实现 onClickListener 有什么优势吗?

我在 Recycler 视图中处理点击的方式是在 ViewHolder 上实现 onClickListener,如下所示

class MyViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView), View.OnClickListener{
    val my_view : View
    init {
        my_view = itemView.findViewById(R.id.my_view_id)
        my_view.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        when (v?.id){
            R.id.my_view_id -> doSomething()
        }
    }
}

而不是像https://stackoverflow.com/a/26196831 中演示的那样使用 RecyclerView.OnItemClickListener()

【问题讨论】:

  • 优点是您可以在 Activity 或 Fragment 中处理点击,并且在适配器内部执行某些操作时会更容易。
  • 你在ViewHolder 中使用它的方式:setOnClickListener(this) 是你应该遵循的方式
  • @pskink 谢谢,但是你试过 Recycler.OnItemClickListener() 方法,有没有性能提升?
  • @humazed 感谢您的意见,但我不太明白您写的内容。你的意思是 Recycler.OnItemClickListener() 选项更好,因为我将能够处理 Activity 或 Fragment 中的点击?
  • 将为每个视图持有者绑定附加点击侦听器,因此如果您每次都分配一个新的点击侦听器,可能会影响性能。项目点击监听器附加到回收器视图,可以在片段中处理。

标签: android android-recyclerview kotlin onclicklistener


【解决方案1】:

你的做法是对的。 ViewHolder 是 RecyclerViews 模式的必需部分。这也是设置 OnClickListener 的一个方便的地方,因为它可以访问适配器和视图。 看看这个由谷歌提供的example

此外,使用 RecyclerView.OnItemClickListener,正如 cmets 中提到的 @Niranjan,不会提供任何关于单击了哪个按钮或视图(在项目内)的线索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2018-05-09
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多