RecycleView 关于 position = viewHolder.adapterPosition 不能返回正确值
在学习第一行代码第三版的时候,发现书中关于 RecycleView 的点击事件是这么处理的:
val viewHolder = ViewHolder(view)
viewHolder.itemView.setOnClickListener{
val position = viewHolder.adapterPosition
val fruit = fruitList[position]
Toast.makeText(parent.context , "${fruit.name} ",Toast.LENGTH_SHORT).show()
}
viewHolder.fruitImage.setOnClickListener {
val position = viewHolder.adapterPosition
Log.d("TAG", "onCreateViewHolder: $position")
val fruit = fruitList[position]
Toast.makeText(parent.context , "${fruit.name} ",Toast.LENGTH_SHORT).show()
}
但是 运行之后报错了, 打断点之后发现: 
position 为 -1
那么怎么做呢:
可以在 onBindViewHolder 这个方法中写点击事件处理;
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val fruit = fruitList[position]
holder.fruitImage.setImageResource(fruit.imageId)
holder.fruitName.text = fruit.name
holder.itemView.setOnClickListener{
val position = holder.adapterPosition
val fruit = fruitList[position]
Toast.makeText(holder.itemView.context , "${fruit.name} ",Toast.LENGTH_SHORT).show()
}
}
参考博客;【kotlin】adapterPosition方法返回-1 无法获取位置 - Left_Stan - 博客园 (cnblogs.com)
ps://www.cnblogs.com/leftstan/p/13921914.html)
|