【发布时间】:2020-12-26 06:03:49
【问题描述】:
所以在我的应用中,我使用的是 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()));
}
我感觉这是一个业余错误,希望你们能帮助我!
【问题讨论】:
标签: java android firebase android-recyclerview google-cloud-firestore