Можно ли динамически менять адаптер ListView? - PullRequest
30 голосов
/ 26 марта 2012

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

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

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

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

Ответы [ 2 ]

31 голосов
/ 27 марта 2012

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

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

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

1 голос
/ 26 марта 2012

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

...