2013-05-01 18 views
8

Wie kann ich die zugrunde liegende ArrayList von einem ArrayAdapter in Android abrufen?Holen Sie sich original ArrayList von ArrayAdapter

Ist das möglich oder muss ich sie getrennt verfolgen?

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

wo ist Code? – stackoverflow

+0

Beispielcode hinzugefügt – jsj

Antwort

5

Sie können dies tun, die darunter liegende ArrayList

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

Ist dies die ideale Lösung? – jsj

+1

Auf diese Weise erhalten Sie tatsächlich einen Klon der ursprünglichen ArrayList, also kommt es auf Ihre Bedürfnisse an. –

+0

@androiddeveloper: Ja, es hängt von den Bedürfnissen ab. Also sage ich nicht, dass es eine ideale Lösung ist, aber kann verwendet werden, um die 'ArrayList' zu bekommen. –

1

Ich denke, zu erhalten, wenn Sie diese Funktion nicht haben, können Sie einfach einen Adapter erstellen, die Ihren Bedürfnissen entspricht, indem die BaseAdapter erstreckt statt .

senden Sie die Liste einfach an den Adapter über seine CTOR, und Sie können es später von außerhalb des Adapters ändern und notifyDataSetChanged aufrufen, wenn Sie fertig sind.

Vorsicht: Wenn Sie die ursprüngliche Instanz der Liste des Adapters haben, sollten Sie Multithreading-Probleme behandeln (oder nur über den UI-Thread zugreifen) und wenn Sie sie ändern (insbesondere hinzufügen/entfernen Items) sollten Sie immer notifyDataSetChanged aufrufen.

0

anderen Ansatz kann aber auch Ihre Anforderungen erfüllen: Erweitern Sie Ihren Adapter von „ArrayAdapter“, erklären die Anordnung von außen, dann in das Array übergeben an den Konstruktor, wenn Sie den Adapter zu schaffen

//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

Es ist einfach. Sie müssen Ihren Adapter erhalten und die clear() Methode verwenden.

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

Hes fragt nicht nach dem Löschen der Elemente im Adapter ... –

Verwandte Themen