2012-03-26 13 views
29

Invece di creare più attività, desidero modificare lo ArrayAdapter del ListView in base alle esigenze. Non vedo alcuna menzione nello API sull'opportunità o meno di chiamare lo setAdapter() più di una volta.Va bene cambiare l'adattatore di ListView in modo dinamico?

Per essere più specifici, dire che vorrei iniziare un'attività che ha un ListView. In questo esempio, ListView viene inizializzato con listView.setAdapter(this) da, ad esempio, CategoryArrayAdapter.

Quindi un utente seleziona una categoria. Senza iniziare una nuova attività, il codice imposterà un nuovo adattatore per lo stesso ListView. Il nuovo adattatore, ad esempio ItemArrayAdapter chiama listView.setAdapter(this).

Qualcuno ha esperienza di averlo fatto con successo o di una ragione specifica per cui questo non dovrebbe essere fatto?

risposta

30

Non vedo alcuna menzione nell'API sull'opportunità o meno di chiamare setAdapter() più di una volta.

La risposta semplice è SI, e ho già fatto cose simili.

Questo è esattamente il motivo per cui Adapter esiste e viene fornito nell'API. Il contenuto effettivo (Modello) e il modo in cui viene reso (Visualizza) per ogni elemento dell'elenco è isolato e implementato all'interno di android.widget.Adapter, anziché direttamente su android.widget.AdapterView. Finché l'adattatore viene implementato correttamente, è possibile scambiare/modificare l'adattatore sottostante effettivo associato a ListView, semplicemente chiamando il metodo setAdapter().

1

Il ripristino della scheda è corretto, ma si noti che potrebbe esserci un problema tecnico della GUI quando si esegue questa operazione, poiché la vista di cui si modifica l'adattatore deve essere ridisegnata con i nuovi dati. A parte questo, dovresti stare bene.

+0

Hai già fatto questo? –

+0

@JeffAxelrod: Sì, l'ho fatto. – Bondax