본문 바로가기

Development/Android

[Android] ViewHolder

Android에서 ListView 혹은 GridView를 쓸때 UI적으로 부하를 줄여주는 방법이다. 공식 홈페이지에서도 findViewById가 속도를 느리게 한다고 아래와 같이 사용하라고 권장한다.


공식 홈페이지에서의 예시는 아래와 같다. 누르면 해당 내용 메시지로 이동


static class ViewHolder {
 
TextView text;
 
TextView timestamp;
 
ImageView icon;
 
ProgressBar progress;
 
int position;
}
ViewHolder holder = new ViewHolder();
holder
.icon = (ImageView) convertView.findViewById(R.id.listitem_image);
holder
.text = (TextView) convertView.findViewById(R.id.listitem_text);
holder
.timestamp = (TextView) convertView.findViewById(R.id.listitem_timestamp);
holder
.progress = (ProgressBar) convertView.findViewById(R.id.progress_spinner);
convertView
.setTag(holder);


직접 사용한 예시는 아래와 같다.


   if (convertView == null) {

convertView = this.mInflater.inflate(R.layout.grid_view_image, null);

final ViewHolder holder = new ViewHolder();

holder.imageView = (ImageView)convertView.findViewById(R.id.list_view_image_imageView);

convertView.setTag(holder);

}//end if

final ViewHolder currentViewHolder = (ViewHolder) convertView.getTag();

ImageLoader.getInstance().displayImage(url, currentViewHolder.imageView);