Можно ли динамически менять адаптер ListView?

Вместо создания нескольких действий я хотел бы изменить ArrayAdapter ListView мере необходимости. Я не вижу упоминания в API о том, можно ли вызывать setAdapter() более одного раза.

Чтобы быть более конкретным, скажем, я хотел бы начать работу с ListView . В этом примере ListView инициализируется с помощью listView.setAdapter(this) , например, из CategoryArrayAdapter .

Затем пользователь выбирает категорию. Без запуска нового действия код установит новый адаптер для одного и того же ListView . Новый адаптер, например ItemArrayAdapter вызывает listView.setAdapter(this) .

У кого-то есть опыт, который сделал это успешно или знает определенную причину, почему это не должно быть сделано?

Я не вижу упоминания в API о том, можно ли вызывать setAdapter () более одного раза.

Простой ответ – ДА, и раньше я делал подобные вещи.

Именно по этой причине Adapter существует и предоставляется в API. Фактическое содержимое (Модель) и его визуализация (Вид) для каждого элемента списка изолированы и реализованы внутри android.widget.Adapter, а не напрямую связаны с android.widget.AdapterView. До тех пор, пока ваш адаптер будет правильно реализован, вы можете поменять / изменить фактический базовый адаптер, связанный с ListView, просто вызвав метод setAdapter ().

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