ArrayAdapter에서 항목을 추가 / 제거 할 수없는 이유는 무엇입니까?
나는를 사용하고 ArrayAdapter<CharSequence>
A의 목록에 항목을 채우는 데 android.widget.Spinner
. 모두 잘 작동합니다.
하지만 이제는 항목 목록을 동적으로 유지하고 싶습니다. 즉, 런타임에 선택 목록에서 항목을 추가 / 제거 할 수 있기를 원합니다. 그러나 클래스 의 Javadocs 가이 두 가지 메서드를 정확히 의도 한 목적으로 사용할 수 있다고 설명 하더라도 호출 adapter.add(item)
하거나 항상를 adapter.remove(item)
얻습니다 .UnsupportedOperationException
ArrayAdapter
이것이 실제로 구현되지 않은 버그입니까, 아니면 여기서 누락 된 것이 있습니까?
일반 Java 배열 (예 :)로 어댑터를 초기화했을 수 String[]
있습니다. java.util.List
인터페이스 를 구현하는 것을 사용해보십시오 (예 :) ArrayList<String>
.
늦었다는 것을 알고 있지만 간단한 설명은 Arrays.asList (T ... array) 메서드 가 읽기 전용 인 ArrayList 라는 사용자 지정 내부 클래스를 반환하기 때문 입니다. 이미 말했듯이 완전한 impl을 제공해야합니다. 예 : java.util.ArrayList.
다음은 소스 코드입니다 ArrayAdapter#remove
.
public void remove(T object) {
if (mOriginalValues != null) {
synchronized (mLock) {
mOriginalValues.remove(object);
}
} else {
mObjects.remove(object);
}
if (mNotifyOnChange) notifyDataSetChanged();
}
UnsupportedOperationException
거기에 던질 수있는 유일한 것은 else- 블록의 줄입니다. 따라서 문제는 사용중인 목록이 항목 제거를 지원하지 않는다는 것입니다. 내 생각 엔 배열을 사용하고 있습니다. 예를 들어 ArrayList를 사용해보십시오.
편집 : 네, 마크가 말한 것 ...
동일한 문제가 발생하여 데이터가 리소스 String Array에 저장되었으므로 createFromResource으로 ArraAdapter를 생성했습니다 .
리소스 String Array에서 ArrayAdapter를 만드는 다음 코드는 문제를 해결했습니다.
Resources res = getResources();
String[] cities = res.getStringArray(R.array.cities_array);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter(
this,
android.R.layout.simple_spinner_item,
new ArrayList(Arrays.asList(cities)));
어댑터 클래스에서-항목 삭제
remove(position);
notifyDataSetChanged();
항목 추가-
adapter.add (newItem);
adapter.notifyDataSetChanged ();
아마도 ArrayList 대신 ArrayAdapter 클래스 에서 List를 사용하고있을 것입니다 .
배열 또는 목록을 ArrayList 로 변환하십시오 -
new ArrayList<ClassType>(Arrays.asList(array));
참고 URL : https://stackoverflow.com/questions/3476723/why-cant-one-add-remove-items-from-an-arrayadapter
'Programing' 카테고리의 다른 글
ASP.NET Core에서 소문자 라우팅을 어떻게 적용하나요? (0) | 2020.12.14 |
---|---|
사용자 정의 유형이있는 std :: maps를 키로 사용하려면 어떻게해야합니까? (0) | 2020.12.14 |
Git은 커밋 후에도 삭제 된 파일을 계속 표시합니다. (0) | 2020.12.14 |
오류 LNK2019 : ___tmainCRTStartup 함수에서 참조 된 해결되지 않은 외부 기호 _main (0) | 2020.12.14 |
Maven : Maven 실행시 zip 파일 열기 오류 (0) | 2020.12.14 |