关于 `position = viewHolder.adapterPosition `不能返回正确值

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)