Адаптер Android Firebase RecyclerView Удалить представления

Я столкнулся с проблемой Firebase RecyclerView, когда я не могу удалить ненужные CardView из моих RecyclerViews. В моем коде я проверяю название города и выбранный гидом город, чтобы они соответствовали им. Он заполняет детали гида только в том случае, если город гида совпадает с выбранным городом, но он также показывает пустую карточку с макетом по умолчанию.

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();

        }

    }

введите описание изображения здесь
введите описание изображения здесь

Я могу изменить видимость адаптера, чтобы он исчез, если он не соответствует требованиям, но проблема в том, что после того, как видимость исчезла, он все еще удерживает место (но невидимо - все еще остается пустое место). Как я могу избежать полного заполнения элемента из представления ресайклера вместо того, чтобы сделать его невидимым, если требования не совпадают?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
400
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не показываете, что такое guideDataRef в вашем коде, поэтому я предполагаю, что это просто объект DatabaseReference для всего, что находится ниже узла \Guides.

Если вы это сделаете, вам позвонят по onBindViewHolder для каждого ребенка в этом конкретном месте. Это означает, что вас попросят создать view для дочернего каждый. Вы не можете выбрать, будет ли отображаться представление для этого элемента.

Похоже, вы предполагаете, что ваш оператор if в методе onBindViewHolder пропустит эти элементы. Но на самом деле происходит то, что вы просто позволяете пустому представлению занять это место в списке.

Вместо этого вы должны придумать запрос, который генерирует только элементы, представляющие интерес для вашего списка. Это означает, что вам нужно сообщить Firebase фильтр для детей, который соответствует вашим критериям.

Вы также можете прочитать все содержимое локации, вручную отфильтровать ненужные элементы и составить список нужных элементов. Затем вы можете создать собственный адаптер с этим списком, и затем он может стать входом для ListView или даже лучше для RecyclerView.

Спасибо за ответ. Я только что обновил свой код (показывает guideDataRef). Постараюсь реализовать ваше решение

Jonas Simonaitis 02.04.2018 17:49

Это именно то, о чем я думал. Хорошо, попробуй и держи меня в курсе.

Alex Mamo 02.04.2018 17:57

Все в порядке? Вы решили проблему?

Alex Mamo 04.04.2018 09:33

Уважаемый Алекс, к сожалению, я не могу решить проблему. В настоящий момент я сижу в Интернете, чтобы найти лучшее решение.

Jonas Simonaitis 04.04.2018 14:23

Где вы застряли при использовании моего решения?

Alex Mamo 04.04.2018 14:26

Создание собственного адаптера

Jonas Simonaitis 04.04.2018 16:24

Расскажи взглядом здесь.

Alex Mamo 04.04.2018 16:25

Спасибо я посмотрю

Jonas Simonaitis 05.04.2018 00:12

Хорошо, держи меня в курсе.

Alex Mamo 05.04.2018 08:23

Извините, что так долго. Это действительно сработало :) Спасибо, мистер Алекс, за вашу помощь

Jonas Simonaitis 06.04.2018 20:50

Приятно слышать, что это сработало! В этом случае рассмотрите возможность принятия моего ответа, нажав на галочку слева под стрелками голосования. Должен поменять цвет на зеленый. Спасибо!

Alex Mamo 07.04.2018 10:25

@AlexMamo, мне нужна твоя помощь. Я пытался связаться с вами, но не могу найти вашу учетную запись в Facebook.

Muntasir Aonik 20.08.2019 22:55

Другие вопросы по теме