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
相关产品推荐
相关产品推荐

