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

遇‘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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:00:51