Android: Как очистить представление списка без удаления данных из списка массивов?

#java #android

#java #Android

Вопрос:

Я пытаюсь создать представление списка, в котором отображаются разные данные на основе выбора из a spinner.

Мое представление списка реализовано через базовый адаптер, который работает нормально.

Мои данные хранятся в списке объектов массива, каждый из которых содержит поля, в которых хранятся отдельные данные, и на основе выбора из счетчика фильтрует данные, хранящиеся в списке массива, и отображает их в виде списка.

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

Спасибо, что уделили время чтению этого.

Ответ №1:

Поскольку ваши данные хранятся в ArrayList , вы можете просто использовать:

 listView.setAdapter(null);
  

Это удалит ваш адаптер ListView , и, таким образом, удалит все отображаемые элементы.

Данные все равно будут в вашем, ArrayList поэтому, если вы хотите повторно отобразить это ListView , вам просто нужно создать свой Adapter и установить его снова. Вы даже можете создать свой глобальный экземпляр BaseAdapter , поэтому вам нужно создать его только один раз.

Ответ №2:

Вы могли бы просто передать другой ArrayList адаптеру с новыми данными для отображения внутри ListView.

Или вы могли бы создать два ArrayList внутри адаптера, один с именем original , который содержит исходные элементы ListView, а другой currentElements , который будет реальным списком массива, чтобы отображать измененные по вашему желанию. С помощью некоторых пользовательских методов вы можете переключаться между двумя версиями ArrayList.

Это может быть та же концепция адаптера, который реализует фильтр.

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

Ответ №3:

Создайте список адаптеров, по одному адаптеру для каждого выбранного. Затем просто переключитесь на другой адаптер, когда выбор будет изменен с помощью listView.setAdapter(adapter)