如何从 FirebaseRecyclerAdapter 中排除项目
How to exclude item from a FirebaseRecyclerAdapter
我的 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
中消失。有什么方法可以做到这一点?
编辑: 我仍在寻找此问题的解决方案,因为它 尚未修复 。我的解决方案是非常不鼓励和非常糟糕的做法,我已经重新考虑自己使用它。
更新:这是非常糟糕的做法并且非常有问题。我非常不鼓励任何人使用它,因为它会使你的RecyclerView非常故障并会导致过多的数据正在加载,这不是您的用户想要的。
最后我手动完成了:
if(x)
viewHolder.itemView.setVisibility(View.GONE); //itemView is a view provided by Android, no need to initiate it.
这表示,如果 x
是 true
,获取该行并将其可见性设置为 GONE
。这为我解决了问题。我可能会在 GitHub.
上分叉这个
最佳做法是使用服务器端过滤:
https://firebase.google.com/docs/database/android/retrieve-data#sorting_and_filtering_data
目前无法使用 FirebaseUI 在客户端过滤您的结果(但我相信它计划在未来实施):
https://github.com/firebase/FirebaseUI-Android/issues/135
我的 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
中消失。有什么方法可以做到这一点?
编辑: 我仍在寻找此问题的解决方案,因为它 尚未修复 。我的解决方案是非常不鼓励和非常糟糕的做法,我已经重新考虑自己使用它。
更新:这是非常糟糕的做法并且非常有问题。我非常不鼓励任何人使用它,因为它会使你的RecyclerView非常故障并会导致过多的数据正在加载,这不是您的用户想要的。
最后我手动完成了:
if(x)
viewHolder.itemView.setVisibility(View.GONE); //itemView is a view provided by Android, no need to initiate it.
这表示,如果 x
是 true
,获取该行并将其可见性设置为 GONE
。这为我解决了问题。我可能会在 GitHub.
最佳做法是使用服务器端过滤: https://firebase.google.com/docs/database/android/retrieve-data#sorting_and_filtering_data
目前无法使用 FirebaseUI 在客户端过滤您的结果(但我相信它计划在未来实施):
https://github.com/firebase/FirebaseUI-Android/issues/135