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

Android RecyclerView调用ViewHolder.setData报cannot find symbol错误如何修复?

问题原因

你遇到的编译报错由两个问题共同导致:

  • 定义TrackAdapter继承RecyclerView.Adapter时没有指定泛型为自定义的TrackAdapter.ViewHolder,导致onBindViewHolder接收的参数默认是父类RecyclerView.ViewHolder类型,父类没有定义setData()方法,编译器无法找到对应方法触发报错。
  • 存储数据的mValues没有指定ArrayList泛型,调用get()方法返回的是默认Object类型,和setData()方法要求的TrackData参数类型不匹配。
修复方案

按顺序修改三处代码即可:

  1. 修改Adapter类的继承声明,指定ViewHolder泛型:
// 替换原有类定义行
public class TrackAdapter extends RecyclerView.Adapter<TrackAdapter.ViewHolder> {
  1. 给ArrayList加上泛型约束,所有涉及的声明同步修改:
// 替换原有成员变量声明
ArrayList<TrackData> mValues;

// 替换原有构造方法定义
public TrackAdapter(Context context, ArrayList<TrackData> values, ItemListener itemListener) {
  1. 修正onBindViewHolder的参数类型:
// 替换原有onBindViewHolder方法
@Override
public void onBindViewHolder(@NonNull TrackAdapter.ViewHolder Vholder, int position) {
    Vholder.setData(mValues.get(position));
}

修改完成后重新编译即可解决报错,只需确保你传入Adapter的数据源本身就是ArrayList<TrackData>类型即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:24:04