我在populateViewHolder
:
public void populateViewHolder(final CampaignHolder viewHolder, final Campaign campaign, final int position) {
String k = getRef(position).getKey();
ref.child(k).child("users").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.hasChild(getUid())) {
//Something...
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//...Populating the viewholder...
如果!dataSnapshot.hasChild(getUid())
为true
,我想删除该项,否则只需继续正常填充ViewHolder。请注意,我不想从数据库中删除该项,我只希望它从FirebaseRecyclerAdapter
开始。有什么方法可以做到这一点?
修改:我仍在寻找解决此问题的方法,因为它已经未修复。我的解决方案非常气馁,非常糟糕的做法,我已经重新考虑过自己使用它了。
答案 0 :(得分:3)
最佳做法是使用服务器端过滤: https://firebase.google.com/docs/database/android/retrieve-data#sorting_and_filtering_data
目前无法使用FirebaseUI过滤您的结果客户端(但我相信它计划在将来实施):
https://github.com/firebase/FirebaseUI-Android/issues/135
答案 1 :(得分:1)
更新:这是非常糟糕的做法和非常故障。我 HIGHLY 不鼓励任何人使用它,因为它将使您的RecyclerView非常小故障并且会导致过多的数据加载,这不是什么您的用户想要。
我最终手动制作:
if(x)
viewHolder.itemView.setVisibility(View.GONE); //itemView is a view provided by Android, no need to initiate it.
这说,如果 x
为true
,请获取该行并将其可见性设置为GONE
。这解决了我的问题。我可能会把它放在GitHub上。