在 RecyclerView Adapter 中实现的 OnClickListener 不起作用

问题描述

我已经为 RecyclerView 实现了以下适配器。我还包含了处理 RecyclerView 项目点击的代码。但是点击监听器不起作用。

class Mylistadapter(private val titles: ArrayList<String>) :
    RecyclerView.Adapter<Mylistadapter.MyViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): MyViewHolder {
        return MyViewHolder.create(parent)
    }

    override fun onBindViewHolder(holder: MyViewHolder,position: Int) {
        holder.bind(titles[position])
    }

    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),View.OnClickListener {
        private val myTextView: TextView = itemView.findViewById(R.id.myTextView)
        
        fun bind(title: String) {
            myTextView.text = title
        }

        override fun onClick(v: View) {
            Toast.makeText(itemView.context,"Clicked",Toast.LENGTH_SHORT).show()
        }

        companion object {
            fun create(parent: ViewGroup): MyViewHolder {
                val view: View = LayoutInflater.from(parent.context)
                    .inflate(R.layout.rv_row,parent,false)
                return MyViewHolder(view)
            }
        }
    }
}

解决方法

在您的视图持有者类中添加以下代码:

init{
    itemView.setOnClickListener(this)
}

因此,最终的适配器将如下所示:

class MyListAdapter(private val titles: ArrayList<String>) :
    RecyclerView.Adapter<MyListAdapter.MyViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): MyViewHolder {
        return MyViewHolder.create(parent)
    }

    override fun onBindViewHolder(holder: MyViewHolder,position: Int) {
        holder.bind(titles[position])
    }

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

        fun bind(title: String) {
            myTextView.text = title
        }

        override fun onClick(v: View) {
            Toast.makeText(itemView.context,"Clicked",Toast.LENGTH_SHORT).show()
        }

        companion object {
            fun create(parent: ViewGroup): MyViewHolder {
                val view: View = LayoutInflater.from(parent.context)
                    .inflate(R.layout.rv_row,parent,false)
                return MyViewHolder(view)
            }
        }
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...