#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)