如何从FirebaseRecyclerAdapter中排除项目

时间:2016-09-07 03:37:37

标签: android firebase firebase-realtime-database firebaseui

我在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开始。有什么方法可以做到这一点?

修改:我仍在寻找解决此问题的方法,因为它已经未修复。我的解决方案非常气馁,非常糟糕的做法,我已经重新考虑过自己使用它了。

2 个答案:

答案 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.

这说,如果xtrue,请获取该行并将其可见性设置为GONE。这解决了我的问题。我可能会把它放在GitHub上。