You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:10:05