【问题标题】:How to exclude item from a FirebaseRecyclerAdapter如何从 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 中排除特定记录,比如提交的日期是否

标签: android firebase firebase-realtime-database firebaseui


【解决方案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(并将其他元素的高度设置为正常)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2013-06-10
    • 2023-03-08
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2019-12-30
    相关资源
    最近更新 更多