java - Firestore RecyclerView itemCount 返回 0
问题描述
所以在我的应用程序中,我使用的是Firestore Recyclerview,我想计算其中显示的项目。我试过使用registerAdapterDataObserver和onItemRangeInserted,它们似乎只有在RecyclerView
. 如果没有,它甚至不会运行。
然后,我尝试实现getItemCount()方法,但它总是返回 0。
我有一个类是 FirestoreRecyclerView 的适配器。
private OnItemClickListener listener;
public JobsAdapter(@NonNull FirestoreRecyclerOptions<Job> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull jobHolder holder, int position, @NonNull Job model) {
holder.textViewTitle.setText(model.getJobName());
holder.textViewDescription.setText(model.getJobDescription());
holder.textViewPostDate.setText(model.getJobDate());
}
@Override
public int getItemCount() {
Log.d("adaptercount", "getItemCount: " + super.getItemCount());
return super.getItemCount();
}
@NonNull
@Override
public jobHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.job_item, parent, false);
return new jobHolder(v);
}
class jobHolder extends RecyclerView.ViewHolder {
TextView textViewTitle;
TextView textViewDescription;
TextView textViewPostDate;
public jobHolder(View itemView) {
super(itemView);
textViewTitle = itemView.findViewById(R.id.text_view_title);
textViewDescription = itemView.findViewById(R.id.text_view_desc);
textViewPostDate = itemView.findViewById(R.id.text_view_post_date);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
listener.onItemClick(getSnapshots().getSnapshot(position), position);
}
}
});
}
}
这里的getItemCount()方法完美运行,但是当我尝试在另一个片段中调用此方法时,它返回 0。
我在片段中的RecyclerViewInit()方法:
Query query = prevJobRef.whereEqualTo("jobIsClosed", false).whereEqualTo("jobSenderID", userID);
FirestoreRecyclerOptions<Job> options = new FirestoreRecyclerOptions.Builder<Job>().
setQuery(query, Job.class)
.build();
adapter = new JobsAdapter(options);
RecyclerView recyclerView = view.findViewById(R.id.recycler_view_activeJobs);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(adapter);
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
public void onItemRangeInserted(int positionStart, int itemCount) {
Log.d("count", String.valueOf(adapter.getItemCount()));
}
});
Log.d("count2", String.valueOf(adapter.getItemCount()));
}
我有一种感觉,这是一个业余错误,我希望你们能帮助我!
解决方案
大多数时候我都遇到了这个错误(我在 StackOverflow 上看到的人要求这个错误)结果证明是查询错误。
如果您的控制台和 logcat 上没有错误,但您仍然得到 0 个结果,那么我猜您的查询肯定有错误。
确保您的查询是正确的。检查字段“jobIsClosed”是否为布尔值,“jobSenderID”是否为字符串。还要检查您的“prevJobRef”参考。
推荐阅读
- solr - 在 hybris Solr 中索引文档的几个属性
- javascript - 在Javascript中按下按钮时选择秒
- ms-access - 如何解决 MS Access SQL UPDATE 语法错误
- python - 如何在没有 cmd 的情况下安装 python 模块?
- python - 为什么我只能通过带有 Spark 结构化流的 Tweepy 侦听器的套接字发送变量“文本”?
- c# - 检查某些电子邮件地址时正则表达式“停止”
- azure - Powershell cmdlet 优雅地关闭 azure 虚拟机
- reactjs - 应用程序处于后台状态反应本机时如何清除间隔?
- sql - SQL 查询在我的 JOIN 练习中不起作用
- node.js - 使用 SSO OIDC 身份验证协议从 WSO2 IS 检索 JWT 令牌