遇‘method does not override method from its superclass: onBindViewHolder’报错咨询
解决RecyclerView Adapter中
onBindViewHolder未覆盖父类方法的问题 嘿,这个报错我之前也踩过坑,大概率是方法签名不匹配或者泛型指定错误导致的,咱们一步步来排查解决:
1. 先确认Adapter的泛型是否正确
你的Adapter必须明确继承自RecyclerView.Adapter<BaseViewHolder>,泛型要和自定义的BaseViewHolder完全对应。如果泛型写成了RecyclerView.Adapter<RecyclerView.ViewHolder>,父类的onBindViewHolder会期望参数是RecyclerView.ViewHolder,你用BaseViewHolder就会出现签名不匹配,编译器直接提示未覆盖父类方法。
正确的Adapter定义示例:
public class YourAdapter extends RecyclerView.Adapter<BaseViewHolder> { // ... 你的数据源、构造方法等逻辑 }
2. 严格校验onBindViewHolder的方法签名
父类的onBindViewHolder方法签名是固定的,你必须完全匹配,包括方法名、参数类型、返回值,而且一定要加上@Override注解——这个注解能让编译器帮你实时校验签名是否正确,避免写了个新方法却误以为是覆盖父类方法的情况。
正确的方法写法:
@Override public void onBindViewHolder(BaseViewHolder holder, int position) { // 这里写数据绑定逻辑,比如给控件赋值、绑定点击事件等 }
要注意几个容易踩的小坑:
- 方法名别写错:是
onBindViewHolder(注意ViewHolder的H是大写),别写成小写的h - 参数顺序不能乱:第一个参数是你的ViewHolder实例,第二个是int类型的position
- 返回值必须是
void,不能写成其他类型
3. 额外排查点
如果上面两步都没问题,那可能是你把onBindViewHolder方法写到了BaseViewHolder类里?不对哦,这个方法是属于Adapter的,ViewHolder只负责持有控件和处理点击事件,Adapter才是负责数据绑定的角色。
结合你提供的BaseViewHolder代码,给你补一个完整的Adapter示例参考:
public class YourAdapter extends RecyclerView.Adapter<BaseViewHolder> { private List<YourDataModel> dataList; private ItemClickListener itemClickListener; public YourAdapter(List<YourDataModel> dataList, ItemClickListener itemClickListener) { this.dataList = dataList; this.itemClickListener = itemClickListener; } @Override public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.your_item_layout, parent, false); return new BaseViewHolder(itemView, itemClickListener); } @Override public void onBindViewHolder(BaseViewHolder holder, int position) { YourDataModel model = dataList.get(position); // 这里可以通过holder访问控件,比如设置图片、文本 // holder.imgEdit.setVisibility(View.VISIBLE); // 或者调用ViewHolder里的自定义方法绑定数据 // holder.bindData(model); } @Override public int getItemCount() { return dataList != null ? dataList.size() : 0; } }
按照上面的步骤调整后,这个报错应该就能解决啦!
内容的提问来源于stack exchange,提问作者Bitcoin
相关产品推荐
相关产品推荐

