【问题标题】:How to Exclude item from FirebaseRecyclerAdapter or Firebase Reference Android如何从 FirebaseRecyclerAdapter 或 Firebase 参考 Android 中排除项目
【发布时间】:2017-11-25 09:38:21
【问题描述】:

我正在开发 Activity 以显示除我的用户之外的所有其他应用用户,并且我正在使用带有 Firebase 的 Java android。

但我无论如何都找不到从 DatabaseReference 或 FirebaseRecyclerAdapter 中排除项目。

我的活动看起来像这样

我的数据库如下所示:

我在这个 Activity 中的代码如下所示:

@Override
public void onStart() {
    super.onStart();
    database = FirebaseDatabase.getInstance();
     myRef = database.getReference().child("users");
    FirebaseRecyclerAdapter<Users,RecyclerViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, RecyclerViewHolder>(Users.class , R.layout.users_single_layout ,RecyclerViewHolder.class,myRef  ) {
        @Override
        protected void populateViewHolder(RecyclerViewHolder viewHolder, Users model, int position) {
                 viewHolder.setDisolayName(model.getDisplay_name());
                viewHolder.setStatus(model.getStatus());
                viewHolder.setImage(model.getImager_thumb(), getContext());
                frinds_relative.setVisibility(View.INVISIBLE);
                final  String users_id = getRef(position).getKey();
                viewHolder.mview.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent target = new Intent(getActivity() , user_profile.class);
                        target.putExtra("profile_id" , users_id) ;
                        startActivity(target);
                    }
                });


        }
    };
    users_recycler.setAdapter(firebaseRecyclerAdapter);
}

如果您有解决方案,我将不胜感激。

【问题讨论】:

  • 排除项目? ..喜欢什么项目?
  • 我的意思是从列表中隐藏项目,例如添加条件不等于
  • AFAIK, FirebaseRecyclerAdapter 不提供这样的功能。您必须根据需要创建自定义适配器。
  • 啊,谢谢你,但我觉得它太忙了!!

标签: android firebase firebase-realtime-database android-recyclerview


【解决方案1】:

我曾经遇到过类似的事情,我是怎么做到的……

首先是在users_single_layout xml文件中给出父布局和id; 在viewholder中引用父布局; 然后隐藏文件的所有内容:

android:visibility="gone"

完成后,您可以在 FirebaseRecyclerAdapter 中设置 if 语句: 检查下面的代码:

users_recycler = new FirebaseRecyclerAdapter<Users,RecyclerViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, RecyclerViewHolder>(Users.class , R.layout.users_single_layout ,RecyclerViewHolder.class,myRef  ) {
    @Override
    protected void populateViewHolder(RecyclerViewHolder viewHolder, Users model, int position) {

            if (adapter.getRef(position).getKey.equals(currentUid){

                 viewholder.thelayout.setVisibility(View.GONE);

             } else {

                 viewHolder.setDisolayName(model.getDisplay_name());
            viewHolder.setStatus(model.getStatus());
            viewHolder.setImage(model.getImager_thumb(), getContext());
            frinds_relative.setVisibility(View.INVISIBLE);
            final  String users_id = getRef(position).getKey();
            viewHolder.mview.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent target = new Intent(getActivity() , user_profile.class);
                    target.putExtra("profile_id" , users_id) ;
                    startActivity(target);
                }
            });

             }


    }
};
users_recycler.setAdapter(firebaseRecyclerAdapter);

【讨论】:

    【解决方案2】:

    FirebaseUI FirebaseRecyclerAdapter 是底层Query 中数据的直接表示,或者存在于 Firebase 数据库中的某个位置。要从适配器中排除某个项目,您必须先将其从 Firebase 位置中排除,或者确保它不再与该特定查询匹配。

    为此,您可以使用以下代码行:

    yourAdapter.getRef(position).removeValue();
    

    【讨论】:

    • FirebaseRecyclerAdapter 没有 remove() 函数
    • yourAdapter.getRef(position) 返回一个具有removeValue() 方法的DatabaseReference 对象。还是谢谢。
    • 它不仅从适配器中删除了值,还从数据库中删除了值,感谢您的帮助,但这不是我想要的
    猜你喜欢
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多