[android] ListView에서 ArrayAdapter를 수정할 수 없음 : UnsupportedOperationException

이름이 포함 된 목록을 만들려고합니다. 이 목록은 수정 가능해야합니다 (추가, 삭제, 정렬 등). 그러나 ArrayAdapter의 항목을 변경하려고 할 때마다 프로그램이 java.lang.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);
   }
});

삽입, 제거 및 지우기 방법을 시도했지만 아무도 작동하지 않았습니다. 누군가 내가 뭘 잘못했는지 말해 줄까요?



답변

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

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

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); 

건배!


답변