这个问题就是由此产生的。我正在寻找一个适配器来填充RecyclerView
多个查询。
我目前正在使用,FirestoreRecyclerAdapter
但被告知,由于它仅接受一个查询,因此无法使用它RecyclerView
在集合中填充选定的文档。
我目前所拥有的:
Query posts = db.collection("posts");
FirestoreRecyclerOptions<Post> options = new FirestoreRecyclerOptions.Builder<Post>()
.setQuery(posts, Post.class)
.build();
adapter = new FirestoreRecyclerAdapter<Post, PostViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull PostViewHolder postViewHolder, int position, @NonNull Post post) {
postViewHolder.setPost(post);
}
@NonNull
@Override
public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_layout, parent, false);
return new PostViewHolder(view);
}
};
recyclerView.setAdapter(adapter);
当前,这会检索我的帖子集合中的所有帖子,但是我想使用列表来仅过滤所述列表中包含userId的帖子。感谢您的任何帮助。
正如道格·史蒂文森(Doug Stevenson)在回答中提到的那样:
您将必须查询要显示的每个文档,将结果收集在内存中,并使用其他类型的适配器填充视图。
正如我在您的代码中看到的那样,您仍在使用单个查询,该查询在您的代码中名为posts
。例如,如果要从两个查询中获取文档,则需要两个查询对象。在代码中,这是在本地合并两个查询的方式:
如您所见,该onSuccess()
方法具有一个参数a List<Object>
,该参数基本上包含两个查询的结果。
我正在寻找一个适配器,以用多个查询填充我的回收站视图。
并回答您的问题,因为您想在中显示数据RecyclerView
,所以最合适的适配器类型可能是a,RecyclerView.Adapter
而不是 FirestoreRecyclerAdapter
不接受列表的适配器。将该列表传递给适配器的构造函数,并在其自身中显示每个元素ViewHolder
。而已!
如果我不知道要查询多少次怎么办?我要查询的列表没有设置的长度。
另外,如果FirestoreRecyclerAdapter扩展了RecyclerView.Adapter,为什么还不能接受查询列表?
您应该知道,因为您从数据库中获得了该号码。如果有两个以上的查询,可以使用
List<Task<DocumentSnapshot>>
在此我的答案后。因此,您可以将任务列表传递给whenAllSuccess()
。可以有两个(如我的示例所示),也可以任意多个。首先,您没有传递
RecyclerView.Adapter
查询列表,而是传递了来自数据库的对象列表。您不能将任何列表传递给FirestoreRecyclerAdapter构造函数,因为其构造函数均不允许您对列表进行分类。您只能通过一个FirestoreRecyclerOptions
对象,对吗?