Android RecyclerView调用ViewHolder.setData报cannot find symbol错误如何修复?
问题原因
你遇到的编译报错由两个问题共同导致:
- 定义
TrackAdapter继承RecyclerView.Adapter时没有指定泛型为自定义的TrackAdapter.ViewHolder,导致onBindViewHolder接收的参数默认是父类RecyclerView.ViewHolder类型,父类没有定义setData()方法,编译器无法找到对应方法触发报错。 - 存储数据的
mValues没有指定ArrayList泛型,调用get()方法返回的是默认Object类型,和setData()方法要求的TrackData参数类型不匹配。
修复方案
按顺序修改三处代码即可:
- 修改Adapter类的继承声明,指定ViewHolder泛型:
// 替换原有类定义行 public class TrackAdapter extends RecyclerView.Adapter<TrackAdapter.ViewHolder> {
- 给ArrayList加上泛型约束,所有涉及的声明同步修改:
// 替换原有成员变量声明 ArrayList<TrackData> mValues; // 替换原有构造方法定义 public TrackAdapter(Context context, ArrayList<TrackData> values, ItemListener itemListener) {
- 修正
onBindViewHolder的参数类型:
// 替换原有onBindViewHolder方法 @Override public void onBindViewHolder(@NonNull TrackAdapter.ViewHolder Vholder, int position) { Vholder.setData(mValues.get(position)); }
修改完成后重新编译即可解决报错,只需确保你传入Adapter的数据源本身就是ArrayList<TrackData>类型即可。
内容的提问来源于stack exchange,提问作者user16955613
相关产品推荐
相关产品推荐

