2013-05-01 5 views
8

안드로이드의 ArrayAdapter에서 기본 ArrayList를 검색하려면 어떻게해야합니까?ArrayAdapter에서 원본 ArrayList 가져 오기

가능합니까? 아니면 별도로 추적해야합니까?

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

여기서 코드 란 무엇입니까? – stackoverflow

+0

예제 코드 – jsj

답변

5

당신은 기본 ArrayList

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

이 이상적인 솔루션입니까? – jsj

+1

이 방법을 사용하면 원래 arrayList의 복제본을 실제로 얻을 수 있으므로 필요에 따라 다릅니다. –

+0

@androiddeveloper : 예, 필요에 따라 다릅니다. 그래서 나는 그것의 이상적인 해결책이라고 말하지 않지만,'ArrayList'를 얻기 위해 사용될 수 있습니다. –

1

나는이 기능이없는 경우, 당신은 쉽게 대신 BaseAdapter를 확장하여 사용자의 요구에 맞는 어댑터를 만들 수 있다고 생각 얻기 위해이 작업을 수행 할 수 있습니다 .

CTOR을 통해 어댑터에 목록을 보내면 나중에 어댑터 바깥에서 변경할 수 있으며 완료되면 notifyDataSetChanged를 호출 할 수 있습니다.

주의 : 어댑터 목록의 원래 인스턴스가있는 경우 멀티 스레딩 문제를 처리하거나 UI 스레드를 통해서만 액세스해야합니다 (특히 UI 스레드를 통해 액세스해야 함). 특히 수정/추가 항목)에서 항상 notifyDataSetChanged를 호출해야합니다.

0

다른 접근하지만 당신의 요구를 충족 할 수 있습니다 : 그것은 쉬운 어댑터

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

을 만들 때 "ArrayAdapter와"에서 어댑터를 확장, 배열이 외부에서, 다음 생성자에 배열을 전달 선언합니다. 어댑터를 가져 와서 clear() 메소드를 사용해야합니다.

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

Hes가 어댑터의 항목 삭제를 요청하지 않습니다 ... –

관련 문제