【问题标题】:How to make firebase recycler adapter to show specific data on some conditions如何使firebase回收器适配器在某些条件下显示特定数据
【发布时间】:2022-01-28 00:14:55
【问题描述】:

我需要知道如何在特定条件下显示数据,即如果用户的 showGigCount 大于 0,则显示用户的数据。我使用 Query 来实现这一点,但通过使用它,所有数据都会消失。如果标记的节点变为零,则不得仅显示该特定用户的数据。下面是我的代码。谢谢你们

MyViewHolder.Class

public MyViewHolder(@NonNull @NotNull 查看 itemView) { 超级(项目视图);

    previewLink =  itemView.findViewById(R.id.uev);
    geglink = (TextView) itemView.findViewById(R.id.rcvGigLink);
    userName = (TextView) itemView.findViewById(R.id.rcvName);
    userAbout = (TextView) itemView.findViewById(R.id.rcvAbout);
    v = itemView;

DashboardActivity.class

fAuth = FirebaseAuth.getInstance();
        firebaseDatabase = FirebaseDatabase.getInstance();
        dRef = FirebaseDatabase.getInstance().getReference("Users");

        recyclerView = findViewById(R.id.dashboardRCV);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
      LoadData();

    }

    private void LoadData() {
        options = new FirebaseRecyclerOptions.Builder<ModelClass>()
                .setQuery(dRef, ModelClass.class)
                .build();
        adapter = new FirebaseRecyclerAdapter<ModelClass, MyViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull ModelClass model) {

           
                
                holder.previewLink.setURL(model.getGig(), new URLEmbeddedView.OnLoadURLListener() {
                    @Override
                    public void onLoadURLCompleted(URLEmbeddedData data) {

                        holder.previewLink.title(data.getTitle());
                        holder.previewLink.description(data.getDescription());
                        holder.previewLink.host(data.getHost());
                        holder.previewLink.thumbnail(data.getThumbnailURL());
                        holder.previewLink.favor(data.getFavorURL());
                    }
                });


                //This will hide the gig if its showGigCount becomes 0
                Query query = dRef.orderByChild("showGigCount").equalTo(0);
                ValueEventListener valueEventListener = new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        if (snapshot.exists()){

                            holder.previewLink.setVisibility(View.GONE);
                        }
                    }
                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {
                    }
                };
                query.addListenerForSingleValueEvent(valueEventListener);



            }

            @NonNull
            @Override
            public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_layout, parent, false);
                return new MyViewHolder(view);
            }
        };
        adapter.startListening();
        recyclerView.setAdapter(adapter);

【问题讨论】:

  • 请仅使用android-studio 标签来回答有关 Android Studio IDE 本身的问题。对于一般的 Android 编程问题,请使用android 标签。

标签: android firebase-realtime-database firebaseui


【解决方案1】:

如果用户的 showGigCount 大于 0,则显示用户的数据。

为此,请使用以下代码行:

DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = db.child("Users");
Query queryByShowGigCount = usersRef.orderByChild("showGigCount").startAt(0).startAt(1);
options = new FirebaseRecyclerOptions.Builder<ModelClass>()
            .setQuery(queryByShowGigCount, ModelClass.class)
            .build();

如您所见,解决此问题的关键是使用Query#startAt() 方法。

【讨论】:

  • 以上代码不工作。如果 showGigCount 是否为 0,则显示所有用户数据。
  • 我将 .startAt(0) 更改为 .startAt(1) 现在它可以工作了。请编辑答案,以便我接受。
  • 很高兴听到它有效。我刚刚更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
相关资源
最近更新 更多