【问题标题】:OnClickListener implemented in Adapter of RecyclerView not working在 RecyclerView 的适配器中实现的 OnClickListener 不起作用
【发布时间】:2021-04-21 08:41:27
【问题描述】:

我已经为 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)
            }
        }
    }
}

【问题讨论】:

    标签: android kotlin android-recyclerview android-adapter onitemclicklistener


    【解决方案1】:

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

    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)
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多