2012-03-26 17 views
29

Anstatt mehrere Aktivitäten zu erstellen, möchte ich die ArrayAdapter der ListView nach Bedarf ändern. Ich sehe keine Erwähnung in der API darüber, ob es in Ordnung ist, setAdapter() mehr als einmal anzurufen.Ist es in Ordnung, einen ListView-Adapter dynamisch zu ändern?

Um genauer zu sein, sagen Sie, ich möchte eine Aktivität starten, die eine ListView hat. In diesem Beispiel wird der ListView mit einem listView.setAdapter(this) von, sagen wir, einem CategoryArrayAdapter initialisiert.

Dann wählt ein Benutzer eine Kategorie aus. Ohne eine neue Aktivität zu starten, wird der Code einen neuen Adapter für denselben ListView setzen. Der neue Adapter, sagen ItemArrayAdapter ruft listView.setAdapter(this).

Hat jemand Erfahrung damit, dies erfolgreich gemacht zu haben oder aus einem bestimmten Grund wissen, warum dies nicht getan werden sollte?

Antwort

30

Ich sehe keine Erwähnung in der API darüber, ob es in Ordnung ist, setAdapter() mehr als einmal aufzurufen.

Die einfache Antwort ist JA, und ich habe ähnliche Dinge schon einmal gemacht.

Dies ist genau der Grund, warum Adapter existiert und in der API zur Verfügung gestellt wird. Der eigentliche Inhalt (Modell) und wie es für jedes Listenelement gerendert (View) wird isoliert und implementiert in android.widget.Adapter, anstatt direkt an android.widget.AdapterView gebunden. Solange Ihr Adapter ordnungsgemäß implementiert ist, können Sie den eigentlichen zugrunde liegenden Adapter, der an die ListView gebunden ist, einfach durch Aufrufen der setAdapter() -Methode austauschen/ändern.

1

Das Zurücksetzen des Adapters ist in Ordnung, aber beachten Sie, dass es möglicherweise einen GUI-Fehler gibt, da die Ansicht, deren Adapter geändert wird, mit den neuen Daten neu gezeichnet werden muss. Abgesehen davon sollte es dir gut gehen.

+0

Haben Sie das schon einmal gemacht? –

+0

@JeffAxelrod: Ja, das habe ich getan. – Bondax