2012-03-26 19 views
29

Zamiast tworzyć wiele działań, w razie potrzeby chcę zmienić ArrayAdapter z ListView. Nie widzę żadnej wzmianki w numerze API o tym, czy można zadzwonić pod numer setAdapter() więcej niż raz.Czy można w sposób dynamiczny zmienić adapter ListView?

Mówiąc prościej, chcę rozpocząć działalność o numerze ListView. W tym przykładzie wersja ListView została zainicjowana za pomocą listView.setAdapter(this) z, powiedzmy, CategoryArrayAdapter.

Następnie użytkownik wybiera kategorię. Bez rozpoczynania nowej aktywności kod ustawi nowy adapter dla tego samego ListView. Nowy adapter, na przykład ItemArrayAdapter, wywołuje listView.setAdapter(this).

Czy ktoś ma doświadczenie, że zrobił to pomyślnie lub zna konkretny powód, dla którego nie należy tego robić?

Odpowiedz

30

Nie widzę żadnej wzmianki w API o tym, czy można wywołać setAdapter() więcej niż raz.

Prosta odpowiedź brzmi TAK i robiłem już podobne rzeczy.

To jest dokładnie powód, dla którego Adapter istnieje w interfejsie API. Rzeczywista zawartość (model) i sposób renderowania (widok) dla poszczególnych elementów listy jest izolowany i implementowany w pliku android.widget.Adapter, zamiast bezpośrednio związany z Android.widget.AdapterView. Dopóki twój adapter jest właściwie zaimplementowany, możesz zamienić/zmienić rzeczywisty adapter bazowy związany z ListView, po prostu wywołując metodę setAdapter().

1

Resetowanie adaptera jest w porządku, ale zauważ, że może to być spowodowane usterką GUI, ponieważ widok, którego adapter jest zmieniany, musi zostać przerysowany wraz z nowymi danymi. Poza tym powinieneś być w porządku.

+0

Zrobiłeś to już wcześniej? –

+0

@JeffAxelrod: Tak, zrobiłem to. – Bondax