2011-01-25 5 views
3

나는 안드로이드 개발에 초보자 다. 나는 Commonsware의 "안드로이드 개발에 대한 바쁜 코더 가이드"에서 발췌 한 내용에 대해 질문했다. ListActivity를 확장하는 클래스를 생성하고 컨텍스트 메뉴를 통해 목록에서 제거하고 삭제할 수있는 기능을 보여주는 예제가 있습니다. 리스트의 문자열 소스를 가진 ArrayAdapter를 설정하기 전에 텍스트는 String 배열을 ArrayList 타입으로 변환한다고 말합니다. "우리는 즉시 목록의 내용을 변경할 수 있기를 원합니다. 일반 문자열 배열보다는 ArrayList를 사용하면 더 쉽습니다. "안드로이드 개발 - ArrayList 사용 <String> 대 배열 ArrayAdapter를 가진 문자열 배열

나는이 개념을 알고 있습니다. 우리가 ArrayList 또는 String 배열을 사용하여 직접 목록을 조작했다면, 왜 우리가 ArrayAdapter.add 삽입/삽입 방법? 일단 ArrayAdapter가 생성되면 (또는 그 .java 파일에서 이해할 수있는대로) Array 또는 ArrayList에서 왔는지에 관계없이 소스 데이터를 List 객체로 변환합니다.

어댑터를 만들 때 정상적인 배열을 사용해 보았는데 오류가 발생했습니다 (텍스트가 말한대로 예상 한대로).하지만 이유를 모르겠습니다. ArrayAdapter와 ArrayList를 ArrayList로 만드는 것의 차이점은 ArrayList와 ArrayList를 같은 List 객체로 변환하지 않는다는 것입니다. 어댑터를 통해 추가/삽입/제거 할 때 원본 소스 변수에 어떤 종류의 동점이 있습니까?

오랜 질문을드립니다. 미리 감사드립니다.

답변

3

원래 배열/변경자를 변경할 수 있습니다. 그런 다음 어댑터의 notifyDataSetChanged()를 호출하면 목록에 새 정보가 업데이트됩니다. ArrayList를 사용하는 경우 일반 연산을 모두 사용하여 일반적인 문자열 배열로 수행 할 수없는 임의의 인덱스에서 데이터를 삽입/제거 할 수 있습니다. ListView의 내용이 원본 데이터 소스에 매우 많이 묶여 있습니다. myListView.setAdapter()를 호출 할 때 어댑터가 내용을 수정하지 않습니다. 그러나 배열을 이와 같이 사용할 수 없으므로 배열을 사용하면 add, remove, insert 등의 메서드를 사용하면 오류가 발생합니다. ArrayAdapter는 실제로 String 배열을 AbstractList 객체로 변환하지만 수정할 수는 없습니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 그것이 조금 더 명확 해지고 있다고 생각한다. 그러나, 나는 배열이나 ArrayList를 직접 변경하지 않는다는 사실에 대해서는 여전히 확실하지 않다. 어댑터를 변경하려고한다. (원래 소스에서 생성 된 자신의 List에 add/insert를 호출한다.)). 그 ArrayAdapter 배열에서 제공되는 Array.AdList() 사용되는 목록에서 본 것으로 생각했는데 그 목록에 대한 변경 사항을 원래 배열에 다시 쓰려고 할 것이라고 생각합니다. 따라서 어댑터에서 add를 호출하면 간접적으로 원래 배열에서 add를 호출하려고 시도합니다. –