0

我面临一个 Firebase RecyclerView 问题,我无法从我的 RecyclerViews 中删除不需要的 CardViews。在我的代码中,我检查城市名称和导游选择的城市以匹配它们。只有当指南的城市与选择的城市匹配时,它才会填充指南的详细信息,但它也会显示具有默认布局的空卡片视图。

guideDataRef = FirebaseDatabase.getInstance().getReference().child("Guides");

public void recycler() {
        super.onStart();

        try {
            //Guide RecyclerView
            Query guideQuery = guideDataRef.orderByKey();
            guideQuery.keepSynced(true);

            FirebaseRecyclerOptions guideOptions =
                    new FirebaseRecyclerOptions.Builder<UserModelClass>().setQuery(guideQuery, UserModelClass.class).build();

            guideAdapter = new FirebaseRecyclerAdapter<UserModelClass, guideViewHolder>(guideOptions) {


                @Override
                protected void onBindViewHolder(@NonNull guideViewHolder holder, final int position, @NonNull final UserModelClass model) {

                    String pickedcity = model.getPickedCity();
                    String postname = (String) cityName.getText();

                    if(pickedcity.equals(postname)) {

                        final String guide_key= getRef(position).getKey();

                        holder.setGuideName(model.getName());
                        holder.setGuideSurname(model.getSurName());
                        holder.setGuideImage(getApplicationContext(), model.getPhotoURL());
                       // holder.mView.setVisibility(View.VISIBLE);

                        //Guide Click listener
                        holder.mView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {

                                Intent guideHireIntent = new Intent(getApplication(), GuideHireActivity.class);
                                guideHireIntent.putExtra("guide_id", guide_key);
                                finish();
                                startActivity(guideHireIntent);

                            }
                        });

                    }

                }

                @NonNull
                @Override
                public guideViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout_guides, parent, false);
                    return new guideViewHolder(view);
                }

                @Override
                public void onError(DatabaseError e){
                    Toast.makeText(getApplicationContext(), "Error by stopping ", Toast.LENGTH_SHORT).show();
                }

                @Override
                public int getItemCount() {
                    return super.getItemCount();
                }

                @Override
                public void onDataChanged() {
                    super.onDataChanged();
                    notifyDataSetChanged();
                }
            };

            guideAdapter.notifyDataSetChanged();
            guideRecyclerView.setAdapter(guideAdapter);
            guideAdapter.startListening();


        } catch (DatabaseException e) {

            Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();

        }

    }

在此处输入图像描述 在此处
输入图像描述

如果适配器的可见性不符合要求,我可以将其更改为消失,但问题是在使其可见性消失后,它仍然存在于该位置(但不可见 - 仍然有一个空白空间)。如何避免完全从回收站视图中填充项目,而不是在要求不匹配时使其不可见?

4

1 回答 1

0

您没有显示guideDataRef代码中的内容,因此我假设它只是节点DatabaseReference下所有内容的对象。\Guides

如果您这样做,您将接到onBindViewHolder该特定位置的每个孩子的电话。这意味着您将被要求view每个孩子制作一个。您无法选择是否为该项目显示视图。

看起来您假设您if的方法中的语句onBindViewHolder将跳过这些项目。但实际发生的是,您只是允许一个空视图占据列表中的那个位置。

相反,您应该提出一个仅生成列表中感兴趣的项目的查询。这意味着您必须告诉 Firebase过滤出符合您条件的孩子。

您还可以阅读该位置的全部内容,手动过滤掉您不想要的项目,并构建您想要的项目列表。然后,您可以使用该列表构建自定义适配器,然后它可以成为 a 的输入,ListView甚至更好地成为 a RecyclerView

于 2018-04-02T15:11:22.613 回答