ListView (3) - ListView 에 image 추가하기
이번 포스팅에서는 지난 포스팅에 이어 ListView 에 text + image 를 출력하는 방법에 대해 알아보자.
ListView 에 image 를 추가하기 위해 custom adapter 와 view holder 에 대해 설명할 것이다.
참고로, 지난 포스팅에서는 ListView 에 text 목록을 출력하는 방법에 대해 알아 보았다.
[Android/UI] - ListView (2) - ListView 에 text 출력하기
Custom adapter
지난 포스팅에서는 ListView 에 text 를 출력하기 위해 adapter 의 개념을 알아보고 ArrayAdapter 를 직접 사용했다.
ListView 에 text + image 를 출력하기 위해서는 adapter 를 custom 하게 만들어 줘야 한다.
Adapter 는 다음과 같이 나눌 수 있다.
이번 예제에서는 BaseAdapter 와 ArrayAdapter 를 이용한 custom adapter 를 만들 것이다.
◼ Adapter : AdapterView(ListView, GridView, Spinner, Gallery) 와 데이터간의 bridge(다리) 역할을 하는 interface
◼ ListAdapter : 리스트뷰와 데이터간의 bridge(다리) 역할을 하는 확장 interface
◼ SpinnerAdapter : 스피너와 데이터간의 bridge(다리) 역할을 하는 확장 interface
◼ BaseAdapter :어댑터에 필요한 기본적인 기능을 구현한 공통 adapter class
◼ SimpleAdapter :XML 파일의 정적인 데이터를 이용한 adapter class
◼ CursorAdapter :데이터베이스의 cursor 를 이용한 adapter class
◼ ArrayAdapter :배열 데이터를 이용한 adapter class
ViewHolder
ViewHolder 는 각 layout 객체에 존재하는 view 를 보관하는 holder 객체다.
ListView 는 inflate를 최소화 하기 위해서 뷰를 재활용 하는데, 이 때 findViewById 를 매번 호출 해야한다.
이로 인한 성능저하를 피하기 위해 ItemView 의 각 요소를 바로 엑세스 할 수 있도록 저장해두고 사용한다.
하단의 코드를 보면서 각 방법의 차이를 생각해보자!
◼ 매번 inflate 하기
- getView() 가 호출될 때 마다 새로운 view 를 생성하는 방법.
- List item 이 많으면 많을수록 느려진다.
◼ ConvertView 재사용 하기
- ConvertView 는 재사용이 가능하도록 설계되어있기 때문에 null 체크를 통하여 infalating 했던 view 에 대해서는 해당 작업을 생략하는 방법.
- List item 이 많아도 느려지지 않는다.
◼ ViewHolder 사용하기
- ViewHolder 를 통해 findViewById 까지 최소화 하는 방법.
- f indViewById 는 실제 메모리를 상당히 사용하게 되어 이를 줄이는 작업으로 성능을 향상 시킬 수 있다.
Source code
https://github.com/parkho79/ListView_2