2013-05-01 17 views
8

Come posso recuperare l'ArrayList sottostante da un ArrayAdapter in Android?Ottieni ArrayList originale da ArrayAdapter

È possibile o devo tenerne conto separatamente?

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>()); 
ArrayList<String> underlying = 
+3

dov'è il codice? – stackoverflow

+0

aggiunto codice di esempio – jsj

risposta

5

Si può fare questo per ottenere il sottostante ArrayList

ArrayList<String> underlying = = new ArrayList<String>(); 
for (int i = 0; i < adapter .getCount(); i++) 
    underlying .add(adapter .getItem(i)); 
+0

Questa è la soluzione ideale? – jsj

+1

in questo modo ottieni effettivamente un clone della lista array originale, quindi dipende dalle tue esigenze. –

+0

@androiddeveloper: sì, dipende dalle esigenze. Quindi non dico che sia una soluzione ideale, ma può essere usata per ottenere 'ArrayList'. –

1

Penso che se non si dispone di questa funzionalità, è possibile creare facilmente un adattatore che si adatta alle vostre esigenze estendendo la BaseAdapter invece .

basta inviare l'elenco all'adattatore tramite il suo CTOR, e puoi cambiarlo più tardi dall'esterno dell'adattatore e chiamare notifyDataSetChanged quando hai finito.

Attenzione però: se si dispone dell'istanza originale dell'elenco dell'adattatore, è necessario gestire i problemi multi-threading (o accedervi solo tramite il thread dell'interfaccia utente) e se lo si modifica (in particolare aggiungi/rimuovi articoli) si dovrebbe sempre chiamare notifyDataSetChanged.

0

approccio differente ma potrebbe soddisfare le esigenze: estendere la scheda da "ArrayAdapter", dichiarare la matrice esternamente, quindi passare la matrice in al costruttore quando si crea l'adattatore

//Adapter Declaration 
class MyArrayAdapter extends ArrayAdapter<MyType> {} 

//Externally declared ArrayList: 
ArrayList<MyType> myList = new ArrayList<MyType>(); 

//Adapter Instantiation (in your activity) 
MyArrayAdapter adapter = new MyArrayAdapter(this, myList); 
-1

è facile. È necessario procurarsi l'adattatore e utilizzare il metodo clear().

((myArrayAdapter)myListView.getAdapter()).clear(); 
+0

Non sta chiedendo di cancellare gli articoli nell'adattatore ... –

Problemi correlati