티스토리 뷰

300x250
300x250



이번 포스팅에서는 지난 포스팅에 이어 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



728x90
댓글