Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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