Android 是否仅使用键与特定键列表匹配的项填充Firebase RecyclerView?
为了简化我的问题:我有一个Firebase数据库,它有一个“业务”节点,业务节点有子节点,该子节点具有ID和有关该特定业务的相应数据。我不想在firebase Recycler视图中显示所有业务,只显示某些业务。对于我想在任何给定时间显示的ID,我有一个ID列表Android 是否仅使用键与特定键列表匹配的项填充Firebase RecyclerView?,android,firebase,firebase-realtime-database,android-recyclerview,firebaseui,Android,Firebase,Firebase Realtime Database,Android Recyclerview,Firebaseui,为了简化我的问题:我有一个Firebase数据库,它有一个“业务”节点,业务节点有子节点,该子节点具有ID和有关该特定业务的相应数据。我不想在firebase Recycler视图中显示所有业务,只显示某些业务。对于我想在任何给定时间显示的ID,我有一个ID列表 ... List<String> businessList = ("00002", "00004", "00021"); ... private void setUpFirebaseAdapter() { mF
...
List<String> businessList = ("00002", "00004", "00021");
...
private void setUpFirebaseAdapter() {
mFirebaseAdapter = new FirebaseRecyclerAdapter<User, FirebaseBusinessViewHolder>
(User.class, R.layout.business_list_item, FirebaseBusinessViewHolder.class, mBusinessReference{
@Override
protected void populateViewHolder(FirebaseBusinessViewHolder viewHolder, User model, int position){
for (String businessID : businessList) {
if (businessID.equals(model.getId())){
//show this item
viewHolder.bindBusiness(model, true);
}
if(!businessID.equals(model.getId())){
//don't show this item
}
}
}
};
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mFirebaseAdapter);
}
。。。
列表业务列表=(“00002”、“00004”、“00021”);
...
私有void setUpFirebaseAdapter(){
mFirebaseAdapter=新的FirebaseRecyclerAdapter
(User.class、R.layout.business\u list\u项目、FirebaseBusinessViewHolder.class、mBusinessReference{
@凌驾
受保护的void populateViewHolder(FirebaseBusinessViewHolder viewHolder,用户模型,int位置){
for(字符串businessID:businessList){
if(businessID.equals(model.getId())){
//显示此项目
viewHolder.bindBusiness(model,true);
}
如果(!businessID.equals(model.getId())){
//不显示此项目
}
}
}
};
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(新的LinearLayoutManager(this));
mRecyclerView.setAdapter(mFirebaseAdapter);
}
如果我运行此代码,它将只显示businessList中的数据,但它也会为数据库中存储的ID不在businessList中的其他项目留下一个空白,因为它创建了空白列表项目,但没有将任何数据绑定到该项目。我显然不希望显示不需要的项目的间隙/空白。如何调整我的列出适配器/视图支架以仅显示所需的项目?通过将其高度设置为0或0,可以完全隐藏不想显示的项目。但这听起来像是一个可怕的难题,因为在这种情况下,您下载的是不需要的数据 这里有两个选项:
您没有发布您在代码中使用的查询,因此我假设它只是
数据库参考
,用于/business
下的所有内容。如果您这样做,您将得到一个调用populateView()
方法,用于该位置的每个孩子。这意味着您将被要求为每个孩子创建一个视图
。您无法选择是否为该项目显示一个视图
看起来您假设populateView
中的if语句将跳过那些不属于businessList
的项目。但实际情况是,您只是允许一个空视图占据列表中的位置
相反,您应该提出一个只生成列表中感兴趣的项目的查询。这意味着您必须告诉Firebase筛选符合您条件的子项。您可以使用equalTo()
方法来实现这一点
另一个解决方案是,读取位置的全部内容,手动筛选出您不想要的项目,并构建一个您想要的项目列表。您可以使用该列表构建一个适配器,然后它可以成为RecyclerView的输入
希望能有帮助