问题描述
我已经为 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)
}
}
}
}