Android开发RecyclerView中Holder.absoluteAdapterPosition返回-1的解决办法
背景
最近在学习安卓开发,参考书是《第一行代码——Android(第三版)》,第四章UI开发时碰到了如下问题。
问题描述
在RecyclerView中,为了响应点击事件,我们通常在Adapter适配器中重写onCreateViewHolder() 等函数,并为每个控件写一个setOnClickListener ,但是我在onCreateViewHolder() 中加监听器时,要获取的position 总是返回-1,导致抛出越界异常。
解决办法
将所有的监听器代码放到onBindViewHolder 方法中,就可以返回正确的position了。
修改后的代码:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val fruit = fruitList[position]
holder.fruitImage.setImageResource(fruit.imageId)
holder.fruitName.text = fruit.name
val viewHolder = holder
viewHolder.itemView.setOnClickListener{
val position = viewHolder.absoluteAdapterPosition
Log.e("itemViewMaeesage","fruitList.length=${fruitList.size},absoluteAdapterPosition=$position.")
val fruit = fruitList[position]
Toast.makeText(context, "You clicked the view ${fruit.name}", Toast.LENGTH_SHORT).show()
}
viewHolder.fruitImage.setOnClickListener{
val position = viewHolder.absoluteAdapterPosition
Log.e("fruitImageMaeesage","fruitList.length=${fruitList.size},absoluteAdapterPosition=$position.")
val fruit = fruitList[position]
Toast.makeText(context, "You clicked the image ${fruit.name}", Toast.LENGTH_SHORT).show()
}
}
|