首页 > 解决方案 > 当我使用 FirebaseRecyclerAdapter 时如何在回收器视图中隐藏空行

问题描述

我在社交应用中有大量帖子。我正在使用 FirebaseRecyclerAdapter,它直接从 firebase 获取结果并监听在 firebase 实时数据库上所做的任何数据更改。我不需要所有帖子,当我在帖子上设置一些条件时,它会正确显示相关帖子,但那些不满足视图在其位置显示的条件的帖子。就像它的显示空列表项,如果条件未满足,如果条件满足,则显示带有数据的列表项。我想从不满足条件的列表中删除列表项。下面是我的代码。我有一个字符串数组,其中包含正在关注的业务用户的 id。Post iteam 包含一个企业 id,现在如果 post 的企业 id 与企业数组 post 的 id 匹配,则应该显示其他明智的不。

Query dbQuery = FirebaseDatabase.getInstance().getReference().child("new").child("BusinessPosts").orderByChild("timeStamp");
    FirebaseRecyclerOptions<PostMC> options = new FirebaseRecyclerOptions.Builder<PostMC>()
            .setQuery(dbQuery, PostMC.class).build();

    firebasePostAdapter = new FirebaseRecyclerAdapter<PostMC, PostsViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull final PostsViewHolder holder, final int position, @NonNull final PostMC postMC) {
            if (followingBusinessesList.contains(postMC.getBusinessID())) {
                if (source.equals("BPF") || (source.equals("BHF"))) {
                    sharedByDBRef.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            if (dataSnapshot.child(mAuth.getCurrentUser().getUid()).hasChild(postMC.getPostID())) {
                                holder.shares.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_post_share_colored, 0, 0, 0);
                            } else {
                                holder.shares.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_post_share, 0, 0, 0);
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });
                } else {
                    likedByDBRef.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            if (dataSnapshot.child(mAuth.getCurrentUser().getUid()).hasChild(postMC.getPostID())) {
                                holder.likes.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_liked, 0, 0, 0);
                            } else {
                                holder.likes.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_like, 0, 0, 0);
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });
                }
                holder.likes.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        mProcessLike = true;
                        final int postLikes = Integer.parseInt(String.valueOf(postMC.getPostLikes()));
                        likedByDBRef.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                if (mProcessLike) {
                                    if (dataSnapshot.child(mAuth.getCurrentUser().getUid()).hasChild(postMC.getPostID())) {
                                        businessPostsRef.child(postMC.getPostID()).child("postLikes").setValue("" + (postLikes - 1));
                                        likedByDBRef.child(mAuth.getCurrentUser().getUid()).child(postMC.getPostID()).removeValue();
                                        likedToDBRef.child(postMC.getPostID()).child(mAuth.getCurrentUser().getUid()).removeValue();
                                        holder.likes.setText(postMC.getPostLikes());
                                        mProcessLike = false;

                                    } else {
                                        businessPostsRef.child(postMC.getPostID()).child("postLikes").setValue("" + (postLikes + 1));
                                        likedByDBRef.child(mAuth.getCurrentUser().getUid()).child(postMC.getPostID()).setValue("Liked");
                                        likedToDBRef.child(postMC.getPostID()).child(mAuth.getCurrentUser().getUid()).setValue("Like");
                                        holder.likes.setText(postMC.getPostLikes());
                                        mProcessLike = false;

                                    }
                                }
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {

                            }
                        });
                    }
                });


                holder.userImage.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (!mAuth.getCurrentUser().getUid().equals(postMC.getBusinessID())) {
                            Intent intent = new Intent(getActivity(), ViewBusinessProfileActivity.class);
                            intent.putExtra("businessID", postMC.getBusinessID());
                            startActivity(intent);
                        }

                    }
                });

                holder.profileLayout.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (!mAuth.getCurrentUser().getUid().equals(postMC.getBusinessID())) {
                            Intent intent = new Intent(getActivity(), ViewBusinessProfileActivity.class);
                            intent.putExtra("businessID", postMC.getBusinessID());
                            startActivity(intent);
                        }
                    }
                });

                Calendar calendar = Calendar.getInstance(Locale.getDefault());
                calendar.setTimeInMillis(Long.parseLong(postMC.getPostTime()));
                PrettyTime prettyTime = new PrettyTime(Locale.getDefault());
                String ago = prettyTime.format(calendar);
                holder.sub.setText(postMC.getPostMessage());
                holder.time.setText(ago);
                holder.shares.setText(postMC.getPostShares());
                holder.likes.setText(postMC.getPostLikes());
                holder.main.setText(postMC.getBusinessName());
                Glide.with(getActivity()).load(postMC.getBusinessImageUrl()).into(holder.userImage);
                if (postMC.getPostImage().equals("")) {
                    holder.postImage.setVisibility(View.GONE);
                } else {
                    Glide.with(getActivity()).load(postMC.getPostImage()).into(holder.postImage);
                }
            } else {

            }
        }

        @NonNull
        @Override
        public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item_single_post, viewGroup, false);
            PostsViewHolder viewHolder = new PostsViewHolder(view);
            return viewHolder;
        }
    };


    userPostsRV.setAdapter(firebasePostAdapter);
    firebasePostAdapter.startListening();

业务数据 发布数据

问题图像列表项

回收器视图图像

标签: androidfirebasefirebase-realtime-databaseandroid-recyclerview

解决方案


您可以通过将可见性设置为“GONE”来隐藏其他部分中的整个视图。在您的 else 部分中添加以下内容。

if(followingBusinessesList.contains(postMC.getBusinessID())) {
 ...
}
else{
  holder.itemView.setVisibility(View.GONE);
  holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));
}

推荐阅读