在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
相关产品推荐
相关产品推荐

