2010-07-08 3 views
88

이름을 포함하는 목록을 만들려고합니다. 이 목록은 수정 가능해야합니다 (추가, 삭제, 정렬 등). 그러나 ArrayAdapter의 항목을 변경하려고 시도 할 때마다 프로그램이 손상되어 java.lang.UnsupportedOperationException 오류가 발생합니다. 여기 내 코드는 다음과 같습니다.ListView에서 ArrayAdapter를 수정할 수 없습니다 : UnsupportedOperationException

ListView panel = (ListView) findViewById(R.id.panel); 
String[] array = {"a","b","c","d","e","f","g"}; 
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_list_item_1, array); 
adapter.setNotifyOnChange(true); 
panel.setAdapter(adapter); 

Button button = (Button) findViewById(R.id.button); 
button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     adapter.insert("h", 7); 
    } 
}); 

나는 삽입, 제거 및 삭제 방법을 시도했지만 그 중 아무 것도 작동하지 않았습니다. 누군가 내가 뭘 잘못했는지 말해 줄래?

답변

254

나는 그것을 시험해 보았다. 나 자신은 그것을 시도했다. 그래서 ArrayAdapter의 소스 코드를 확인하고 문제를 발견했습니다. ArrayAdapter는 배열에 의해 초기화 될 때 배열을 수정할 수없는 AbstractList (List)로 변환합니다.

해결책 ArrayAdapter를 초기화하는 동안 배열을 사용하는 대신 ArrayList<String>을 사용하십시오.

String[] array = {"a","b","c","d","e","f","g"}; 
ArrayList<String> lst = new ArrayList<String>(Arrays.asList(array)); 
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_list_item_1, lst); 

건배!

+7

정말 고마워요! 나 한테 좌절감을 구해 줬어. String []이 작동하지 않는 이유를 설명해 주시겠습니까? – Ryan

+2

수정 사항을 추가했습니다. :) 다시 읽으십시오. – st0le

+0

@Ryan 배열에 삽입 할 수 없으면 목록 구현에서 허용하지 않는 한 목록에 넣을 수 있습니다. 백업 데이터가 변경되지 않으면 ArrayAdapter를 사용하여 더 효율적인 메모리 기술을 사용할 수 있습니다. –

관련 문제