Получить строку TextView из recyclerview

#android #android-studio #android-layout #android-recyclerview

Вопрос:

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

  if (dealer.getName().equals("abcde"))
     cardlayout.setVisibility(View.GONE);
       
 

Комментарии:

1. Я думаю, что лучшим подходом к этой проблеме было бы удалить соответствующий элемент из списка элементов.

2. да, и, пожалуйста, покажите свой класс адаптера rv и класс активности.

Ответ №1:

Мне кажется, что в ваших элементах RecyclerView есть несколько элементов с visibility оф Gone .

И я уверен, что вы делаете эту логику в onBindViewHolder() в RecyclerView.Adapter

Почему вы оказались в такой ситуации?

onBindViewHolder() вызывается с этим элементом , когда элемент инициализирован, и когда вы переходите в другую позицию, вы больше не видите этот элемент и возвращаетесь к этой позиции элемента.

В окне вторичной переработки.Документация по адаптеру, Google говорит о onBindViewHolder() :

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

И

вы должны использовать параметр position только при получении соответствующего элемента данных внутри этого метода и не должны хранить его копию.

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

Как решить эту проблему?

Для скрытой логики , которая отображает или изменяет элементы представления onBindViewHolder() , убедитесь, что если у вас есть дело if , у вас есть дело else .

YourRecyclerViewAdapter.kt

 override fun onBindViewHolder(holder: YourViewHolder, position: Int) {
    ...
    if (dealer.name == "abcde") {
        cardLayout.visibility = View.GONE
    } else { // You should have else case to return the correct content for other positions
        cardLayout.visibility = View.VISIBLE
    }
    ...
}