2013-05-01 13 views
8

Jak mogę odzyskać podstawową tablicę ArrayList z ArrayAdapter w systemie Android?Uzyskaj oryginalną tablicę ArrayList z ArrayAdapter

Czy jest to możliwe, czy muszę je śledzić osobno?

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

gdzie jest kod? – stackoverflow

+0

dodany przykład kodu – jsj

Odpowiedz

5

Można to zrobić, aby uzyskać bazowego ArrayList

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

Czy to jest idealne rozwiązanie? – jsj

+1

w ten sposób otrzymasz klon oryginalnej listy arrayList, więc zależy to od twoich potrzeb. –

+0

@androiddeveloper: tak, to zależy od potrzeb. Nie twierdzę, że jest to idealne rozwiązanie, ale można go użyć do uzyskania 'ArrayList'. –

1

myślę, że jeśli nie ma tej funkcji, można łatwo stworzyć adapter, który pasuje do Twoich potrzeb poprzez rozszerzenie BaseAdapter zamiast .

po prostu wyślij listę do adaptera za pośrednictwem jej CTOR, a możesz ją później zmienić spoza adaptera i wywołać notifyDataSetChanged po zakończeniu.

Uwaga: jeśli posiadasz oryginalną instancję listy adapterów, powinieneś poradzić sobie z problemami z wieloma wątkami (lub uzyskać do nich dostęp tylko przez wątek interfejsu użytkownika), a jeśli to zmienisz (zwłaszcza dodaj/usuń elementy) należy zawsze wywoływać notifyDataSetChanged.

0

inne podejście, ale może dobrze spełniać swoje potrzeby: Rozszerz swoją kartę z „ArrayAdapter”, oświadczam tablica na zewnątrz, a następnie przekazać tablicę do konstruktora podczas tworzenia adapter

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

To jest łatwe. Musisz zdobyć adapter i użyć metody clear().

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

Nie prosi o usunięcie elementów w adapterze ... –

Powiązane problemy