如何从 FirebaseRecyclerAdapter 中排除项目

Posted

技术标签:

【中文标题】如何从 FirebaseRecyclerAdapter 中排除项目【英文标题】:How to exclude item from a FirebaseRecyclerAdapter 【发布时间】:2017-01-14 14:39:23 【问题描述】:

我的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 中删除。有什么方法可以做到这一点?


编辑:我仍在寻找解决此问题的方法,因为它尚未修复。我的解决方案是非常不鼓励和非常糟糕的做法,我已经重新考虑自己使用它。

【问题讨论】:

看来下次我得给 400 rep 赏金 嗨,我想从 firebase 中排除特定记录,比如提交的日期是否 【参考方案1】:

最佳做法是使用服务器端过滤: https://firebase.google.com/docs/database/android/retrieve-data#sorting_and_filtering_data

目前无法使用 FirebaseUI 过滤您的结果客户端(但我相信它计划在未来实施): https://github.com/firebase/FirebaseUI-Android/issues/135

【讨论】:

【参考方案2】:

更新:这是非常糟糕的做法并且非常有问题。我强烈不鼓励任何人使用它,因为它使您的 RecyclerView 出现问题并导致数据加载过多,这不是什么您的用户想要

我最终是这样手动制作的:

if(x)
   viewHolder.itemView.setVisibility(View.GONE); //itemView is a view provided by Android, no need to initiate it.

这表示,如果 xtrue,则获取行并将其可见性设置为 GONE。这为我解决了这个问题。我可能会在 GitHub 上 fork 这个。

【讨论】:

不要将其设置为消失,将其高度设置为0(并将其他元素的高度设置为正常)

以上是关于如何从 FirebaseRecyclerAdapter 中排除项目的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

如何从 Firebase 获取所有设备令牌?

如何直接从类调用从接口继承的方法?

如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个

如何从Mac从android studio中的fabric注销? [复制]

如何从设备中获取 PDF 文件以便能够从我的应用程序中上传?