Kotlin RecyclerView用absoluteAdapterPosition报错,类型不匹配如何修复?
问题解决:RecyclerView absoluteAdapterPosition 类型不匹配错误
问题根源
错误提示“需要AdapterView<*>!,但传入的是Int”,核心原因是你的OnItemClickListener接口定义的onItemClick方法参数类型错误——它要求接收AdapterView类型参数,但你传入的是absoluteAdapterPosition返回的Int类型position,导致类型不匹配。
解决方案
1. 修正自定义点击接口
将OnItemClickListener的onItemClick方法参数改为Int类型,匹配RecyclerView的position传递:
interface OnItemClickListener { fun onItemClick(position: Int) }
2. 确保Adapter中正确传递Listener
在你的RecyclerView Adapter中,持有该Listener实例,并在创建ViewHolder时传入:
class InstructorAdapter(private val itemClickListener: OnItemClickListener) : RecyclerView.Adapter<InstructorViewHolder>() { // 实现Adapter的其他方法(getItemCount、onBindViewHolder等) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): InstructorViewHolder { val itemView = LayoutInflater.from(parent.context) .inflate(R.layout.your_item_layout_id, parent, false) return InstructorViewHolder(itemView, itemClickListener) } }
3. 保留原ViewHolder逻辑
你当前的ViewHolder点击逻辑无需修改,只要接口参数类型正确,absoluteAdapterPosition或bindingAdapterPosition(根据需求选择)就能正常传递Int类型的position:
class InstructorViewHolder(itemView: View, listener: OnItemClickListener) : RecyclerView.ViewHolder(itemView){ val firstName: TextView = itemView.findViewById(R.id.tvInstructorName) val phoneNumber: TextView = itemView.findViewById(R.id.tvInstructorNumber) val age: TextView = itemView.findViewById(R.id.tvInstructorAge) init { itemView.setOnClickListener { listener.onItemClick(absoluteAdapterPosition) } } }
补充说明
官方文档中absoluteAdapterPosition确实返回Int类型,问题并非出在该方法本身,而是你自定义的点击接口参数与传入值类型不匹配。如果之前的接口误继承了AdapterView.OnItemClickListener(该接口的onItemClick方法参数为AdapterView、View、Int、Long),请替换为上述自定义接口即可解决问题。
内容的提问来源于stack exchange,提问作者Mosfeq Hossain
相关产品推荐
相关产品推荐

