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

FirestorePagingAdapter的onCreateViewHolder未覆写父类方法问题

FirestorePagingAdapter 提示onCreateViewHolder未覆写父类方法的解决方法

使用FirestorePagingAdapter从Firebase拉取数据时,编译器提示onCreateViewHolder未覆写父类方法,相关代码及解决方案如下:


报错的FirestorePagingAdapter代码

adapter2 = new FirestorePagingAdapter<Modelo_Racao, FragmentTodosManejo.genericHolder>(options2) {
   @NonNull
    @Override
    public FragmentTodosManejo.genericHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.manejo_item, parent, false);
        return new FragmentTodosManejo.genericHolder(view);
    }

Modelo_Racao实体类代码

public class Modelo_Racao {

    private String nome;
    private String tipo;
    private String quantidade;
    private String dataInicio;
    private String dataFim;
    private String animalNaoCadastradoRacao;
    private String obsRacao;
    private String spinnerLoteRacao;
    private String spinnerAnimalRacao;

    public Modelo_Racao(){}

    public Modelo_Racao(String nome, String tipo, String quantidade, String dataInicio, String dataFim, String animalNaoCadastradoRacao, String obsRacao, String spinnerLoteRacao, String spinnerAnimalRacao) {
        this.nome = nome;
        this.tipo = tipo;
        this.quantidade = quantidade;
        this.dataInicio = dataInicio;
        this.dataFim = dataFim;
        this.animalNaoCadastradoRacao = animalNaoCadastradoRacao;
        this.obsRacao = obsRacao;
        this.spinnerLoteRacao = spinnerLoteRacao;
        this.spinnerAnimalRacao = spinnerAnimalRacao;
    }

    public String getNome() { return nome; }
    public void setNome(String nome) { this.nome = nome; }
    public String getTipo() { return tipo; }
    public void setTipo(String tipo) { this.tipo = tipo; }
    public String getQuantidade() { return quantidade; }
    public void setQuantidade(String quantidade) { this.quantidade = quantidade; }
    public String getDataInicio() { return dataInicio; }
    public void setDataInicio(String dataInicio) { this.dataInicio = dataInicio; }
    public String getDataFim() { return dataFim; }
    public void setDataFim(String dataFim) { this.dataFim = dataFim; }
    public String getAnimalNaoCadastradoRacao() { return animalNaoCadastradoRacao; }
    public void setAnimalNaoCadastradoRacao(String animalNaoCadastradoRacao) { this.animalNaoCadastradoRacao = animalNaoCadastradoRacao; }
    public String getObsRacao() { return obsRacao; }
    public void setObsRacao(String obsRacao) { this.obsRacao = obsRacao; }
    public String getSpinnerLoteRacao() { return spinnerLoteRacao; }
    public void setSpinnerLoteRacao(String spinnerLoteRacao) { this.spinnerLoteRacao = spinnerLoteRacao; }
    public String getSpinnerAnimalRacao() { return spinnerAnimalRacao; }
    public void setSpinnerAnimalRacao(String spinnerAnimalRacao) { this.spinnerAnimalRacao = spinnerAnimalRacao; }
}

genericHolder代码

private class genericHolder extends RecyclerView.ViewHolder {
    private final TextView title;
    private final ImageView icon;
    private final TextView assunto;
    private final TextView preView;
    private final TextView date;
    private final TextView status;

    public genericHolder(@NonNull View itemView) {
        super(itemView);

        title = itemView.findViewById(R.id.icon_item_manejo_user);
        icon = itemView.findViewById(R.id.icon_item_manejo);
        assunto = itemView.findViewById(R.id.item_manejo_assunto);
        preView = itemView.findViewById(R.id.item_manejo_pre_view);
        date = itemView.findViewById(R.id.text_date_manejo);
        status = itemView.findViewById(R.id.status_item_manejo);
    }
}

问题原因与解决步骤

1. 调整genericHolder的访问权限

genericHolder是私有内部类,FirestorePagingAdapter的匿名子类无法访问该类,导致方法签名不匹配。将其访问修饰符改为public或protected:

public class genericHolder extends RecyclerView.ViewHolder {
    // 原有代码不变
}

2. 补全FirestorePagingAdapter的必要覆写方法

FirestorePagingAdapter必须覆写onBindViewHolder和onLoadingStateChanged方法,缺失会导致编译器误报。补全后代码如下:

adapter2 = new FirestorePagingAdapter<Modelo_Racao, FragmentTodosManejo.genericHolder>(options2) {
    @NonNull
    @Override
    public FragmentTodosManejo.genericHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.manejo_item, parent, false);
        return new FragmentTodosManejo.genericHolder(view);
    }

    @Override
    protected void onBindViewHolder(@NonNull FragmentTodosManejo.genericHolder holder, int position, @NonNull Modelo_Racao model) {
        // 绑定数据到控件示例
        holder.assunto.setText(model.getNome());
        holder.date.setText(model.getDataInicio());
        // 其他控件赋值逻辑
    }

    @Override
    protected void onLoadingStateChanged(@NonNull LoadingState state) {
        // 处理加载状态变化
        switch (state) {
            case LOADING_INITIAL:
            case LOADING_MORE:
                // 显示加载动画
                break;
            case LOADED:
                // 隐藏加载动画
                break;
            case ERROR:
                // 加载错误处理,比如重试
                retry();
                break;
            case FINISHED:
                // 无更多数据提示
                break;
        }
    }
};

3. 清理编译器缓存

执行Build -> Clean Project后再Build -> Rebuild Project,消除缓存导致的误报。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:44:52