2016-06-01 3 views
0

AdapterArrayAdapter<>에서 구현했습니다. 생성자 내에서 UUID을 키로 사용하고 이라는 또 다른 임의 클래스를 사용하는 HashMap을 사용하고 있습니다. 기본적으로, 그것은 장치 (fyi)를 가지고 객실을 가지고 SmartHome 애플 리케이션입니다. 그러나 RoomAdapter에 대한 생성자 (https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView에 있음)의 구현은 super() - HashMaps를 사용하지 않는 메서드를 사용하고 있습니다.자체 구현의 어댑터 생성자가 hashMap.values ​​()를 허용하지 않습니다.

코드

public RoomAdapter(Context context, HashMap<UUID, Room> room) { 
    super(context, R.layout.list_item_room, room.values()); 
} 

나는 초보자 자바 단계에서 오전, 내가 정말 찾기 위해 무엇을 모른다. 나는 room.values()을 호출 할 때 받았던 컬렉션을 HashMap을 사용하기 전에 내가 사용했던 ArrayList로 변환하려고 시도했다.

코드의이 위치에서이 문제를 해결할 수있는 좋은 방법이 있습니까? 아니면 내 코드를 변경하고 room에 대한 ArrayList를 사용해야합니까?

public RoomAdapter(Context context, HashMap<UUID, Room> room) { 
    super(context, R.layout.list_item_room, new ArrayList<>(room.values())); 
} 
:

답변

0

문제가 당신의 슈퍼 클래스의 생성자는 매개 변수로 입력 Collection 예 (Collection<Type>)를하지 않지만, 입력 List 예 (List<Type>) 걸릴 것입니다 경우

, 당신은 뭔가 같이 할 수있다

여기서 내가했던 것은 새로운 ArrayList를 인라인으로 인스턴스화하고이를 매개 변수로 슈퍼 클래스의 생성자에 전달했습니다. ArrayList의 생성자 중 하나는 Collection을 입력합니다. room.values()을 호출하면 얻을 수 있습니다.

+0

이 메서드를 사용할 때마다이 오류가 발생합니다.'android.view.InflateException : 이진 XML 파일 줄 # 6 : 이진 XML 파일 줄 # 6 : 클래스'TextView'를 inflating하는 오류'convertView = inflater.inflate (R .형세.' – chriszo111

+0

이전 문제를 수정하면 행 번호 6의 레이아웃 XML에 오류가 있음을 의미합니다. – saganaut

0

이유는 HashMap#values()입니다. ArrayList을 반환하지 않습니다. Map에있는 모든 값을 포함하는 Collection<T> 개체를 반환합니다. ArrayList<T>Collection<T>이지만 Collection<T>은 반드시 ArrayList<T> 일 필요는 없으므로 어댑터는 컬렉션과 관련하여 무엇을해야할지 모릅니다. ArrayList 일 수도 있고 HashSet 일 수도 있고 Vector 일 수도 있고 LinkedBlockingQueue 일 수도 있고 Collection에서 연장되는 개체 수 중 하나 일 수도 있습니다. 실제로 HashMap 만 알고있는 사용자 정의 구현 일 수 있습니다. 요점은 기본 컬렉션이 무엇인지는 중요하지 않으며, HashMap은 반환 할 내용을 보장하지 않으므로 사용자 인터페이스가 그대로 유지됩니다.

당신과 같이 ArrayList에로의 값을 복사하여 코드를 수정할 수 있습니다

super(context, R.layout.list_item_room, new ArrayList(room.values())); 

을하지만, 그것은 HashMap의 때문에 당신이 항목을 넣어하는 순서가 될 것이라는 보장이 없다 받은 순서와 동일.
는 하지만 값은 HashMap의가에 넣어하기로 결정 임의대로 순서에있을 것입니다.

더 예측 HashMap의 구현이 목적을 이룰 수있는 LinkedHashMap입니다.

+0

몇 분 전에 LinkedHashMap에 대해 읽었으며 문서를 읽으 려하고 있습니다. 매우 유용합니다. 그 이유에 대해 정확하게 물어 보았습니다. ArrayList가 올바르게 인스턴스화 될 것이라는 보장이 없기 때문에 조언을 주셔서 감사합니다. – chriszo111

+0

ArrayList가 올바르게 인스턴스화됩니다. 'values ​​()'에 대한 호출로 반환 된'Collection '는 당신이 신경 쓰는 순서대로 엘리먼트를 가질 것이라는 보장은 없다. 값을 가져 오는 데이터 구조는 본질적으로 순서가 없습니다. 요소에 액세스하는 유일한 방법은 키를 사용하는 것입니다. 그러므로'Collection '을 값, 키, 항목 등의 구체적인'List '으로 바꾸고 싶다면 명령을 처방 할 수 없습니다. – saganaut

관련 문제