首页 > 解决方案 > Firestore RecyclerView itemCount 返回 0

问题描述

所以在我的应用程序中,我使用的是Firestore Recyclerview,我想计算其中显示的项目。我试过使用registerAdapterDataObserveronItemRangeInserted,它们似乎只有在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()));

  
}

我有一种感觉,这是一个业余错误,我希望你们能帮助我!

标签: javaandroidfirebaseandroid-recyclerviewgoogle-cloud-firestore

解决方案


大多数时候我都遇到了这个错误(我在 StackOverflow 上看到的人要求这个错误)结果证明是查询错误。

如果您的控制台和 logcat 上没有错误,但您仍然得到 0 个结果,那么我猜您的查询肯定有错误。

确保您的查询是正确的。检查字段“jobIsClosed”是否为布尔值,“jobSenderID”是否为字符串。还要检查您的“prevJobRef”参考。


推荐阅读