Android RecyclerViewAdapter перезаписывает данные списка

Может ли кто-нибудь объяснить мне, почему список ConnectionsCategories переписывается в этой части кода? Я пытаюсь отфильтровать данные внутри метода performFiltering фильтра, размещенного внутри RecyclerView. Как я заметил, список принимает новые значения в этой строке: connectionsCategoryModelCopy.setValues ​​(filterConnectionsModels);

String charString = charSequence.toString();
            filteredConnectionsCategories.clear();
            if (charString.isEmpty()) {
                filteredConnectionsCategories.addAll(connectionsCategories);
            } else {
                List<ConnectionsCategoryModel> filteredList = new ArrayList<>();
                for (ConnectionsCategoryModel connectionsCategoryModel : connectionsCategories) {
                    ConnectionsCategoryModel connectionsCategoryModelCopy = connectionsCategoryModel;
                    List<ConnectionsModel> connectionsModels = connectionsCategoryModelCopy.getValues();
                    List<ConnectionsModel> filteredConnectionsModels = new ArrayList<>();
                    for (ConnectionsModel connectionsModel : connectionsModels) {
                        if (connectionsModel.getName().toLowerCase().replaceAll("\\s", "").contains(charString.toLowerCase().replaceAll("\\s", ""))) {
                            filteredConnectionsModels.add(connectionsModel);
                        }
                    }
                    if (!filteredConnectionsModels.isEmpty()) {
                        connectionsCategoryModelCopy.setValues(filteredConnectionsModels);
                        filteredList.add(connectionsCategoryModelCopy);
                    }
                }
                filteredConnectionsCategories = filteredList;
            }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
 ConnectionsCategoryModel connectionsCategoryModelCopy = connectionsCategoryModel;

Эта строка - это ваша проблема. Вы делаете здесь «мелкую копию». Когда вы получите этот список:

  List<ConnectionsModel> connectionsModels = connectionsCategoryModelCopy.getValues();

вам нужно сделать «глубокую копию» каждого элемента, прежде чем выполнять вызов замены.

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