如何从 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.
这表示,如果 x
是 true
,则获取行并将其可见性设置为 GONE
。这为我解决了这个问题。我可能会在 GitHub 上 fork 这个。
【讨论】:
不要将其设置为消失,将其高度设置为0(并将其他元素的高度设置为正常)以上是关于如何从 FirebaseRecyclerAdapter 中排除项目的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数
如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个