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

在RecyclerView适配器中调用ViewHolder方法/变量提示未解析资源

问题原因

你遇到的错误是因为Adapter的泛型声明用了基类RecyclerView.ViewHolder,导致onBindViewHolder里的holder被识别为基类实例,而基类并没有你自定义的bind方法和x变量,所以编译器找不到这些成员。

解决方法

把Adapter的泛型参数改成你自定义的LaunchesViewHolder,同时调整相关方法的类型声明:

修改后的完整代码

class LaunchesAdapter(private val dataSet: List<LaunchItem>) :
    RecyclerView.Adapter<LaunchesAdapter.LaunchesViewHolder>() { // 泛型替换为自定义ViewHolder

   inner class LaunchesViewHolder(val binding: LaunchesItemLayoutBinding) :
        RecyclerView.ViewHolder(binding.root) {
        var x = 0 // 原代码是val只读变量,改成var才能修改值
        fun bind(currentLaunch: LaunchItem) {
           // 这里编写数据绑定逻辑
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LaunchesViewHolder { // 返回类型改为自定义ViewHolder
        return LaunchesViewHolder(
            LaunchesItemLayoutBinding.inflate(
                LayoutInflater.from(parent.context),
                parent,
                false
            )
        )
    }

    override fun onBindViewHolder(holder: LaunchesViewHolder, position: Int) { // holder参数类型改为自定义ViewHolder
        holder.bind(dataSet[position]) // 现在可正常调用bind方法
        holder.x = 1 // 现在可正常修改x变量
    }

    override fun getItemCount(): Int {
        return dataSet.size
    }
}

额外说明

  • 原代码中x是val(只读变量),如果需要修改它的值,必须改为var(可变变量),否则会触发“Val cannot be reassigned”的错误。
  • Kotlin中函数默认就是public修饰,自定义ViewHolder的bind方法无需额外添加public关键字。

内容的提问来源于stack exchange,提问作者na ly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:05:25