글
안드로이드에서 가장 많이 사용하는 View 는 ListView 일 것으로 생각됩니다.(적어도 저는...)
이 리스트뷰는 기본적으로 리스트형의 많은양의 데이터를 표시하기위해 존재합니다.
그래서 프로그래밍 하는 스타일에 따라 체감속도에 영향을 많이 줍니다.
안드로이드에서는 이러한 데이터의 효율적인 처리를 위해서 이미 사용되어진 view 를 재활용 할 수 있도록 해 주고 있습니다.
이번 포스트에서는 그 재활용 하는 방법에 대해서 알아보도록 하겠습니다.
안드로이드는 ListView 에 데이터를 채울때 Adapter 를 이용합니다.
이 Adapter 를 생성할때 가장 중요한메소드는 getView() 입니다.
아래와 같은 기본형을 가집니다.
이 메소드의 파라메터중 convertView 가 재활용과 관련된 파라메터 입니다.
이 convertView 파라메터에서는 재사용할 view 가 없다면 null 을 넘겨주고 있다면 해당 view 를 넘겨줍니다.
이를 이용하여 Holder 패턴을 구현하는데 대부분 아래와 같이 사용합니다.
이런 형태를 취하는 이유는 안드로이드에서 시간이 가장 오래걸리는 작업중의 하나가 findViewById 메소드를 이용한 xml 파싱작업 이기 때문에 해당 메소드의 호출을 최소화 하기 위함입니다.
이 리스트뷰는 기본적으로 리스트형의 많은양의 데이터를 표시하기위해 존재합니다.
그래서 프로그래밍 하는 스타일에 따라 체감속도에 영향을 많이 줍니다.
안드로이드에서는 이러한 데이터의 효율적인 처리를 위해서 이미 사용되어진 view 를 재활용 할 수 있도록 해 주고 있습니다.
이번 포스트에서는 그 재활용 하는 방법에 대해서 알아보도록 하겠습니다.
안드로이드는 ListView 에 데이터를 채울때 Adapter 를 이용합니다.
이 Adapter 를 생성할때 가장 중요한메소드는 getView() 입니다.
아래와 같은 기본형을 가집니다.
|
이 메소드의 파라메터중 convertView 가 재활용과 관련된 파라메터 입니다.
이 convertView 파라메터에서는 재사용할 view 가 없다면 null 을 넘겨주고 있다면 해당 view 를 넘겨줍니다.
이를 이용하여 Holder 패턴을 구현하는데 대부분 아래와 같이 사용합니다.
public class ItemHolder { public TextView textView = null; } public View getView(int position, View convertView, ViewGroup parent) { ItemHolder holder = null; if (convertView == null || convertView.getId() != R.layout.list_item) { // 재사용할 view 가 없거나 재사용할 view 가 다른 layout 으로 작성되어졌을경우 xml 새로 파싱합니다. // convertView 에는 여기서 inflate 한 view 만 넘어오는것이 아닙니다. // 예를들어 이 listview 에 headerView 가 있다면 headerView 역시 convertView 에 넘어오게 됩니다. // 이럴경우 원하지 않은 결과가(거의 크래쉬) 나오기때문에 반드시 layout 이 맞는지를 비교해 줘야합니다. convertView = inflater.inflate(R.layout.list_item, null); holder = new ItemHolder(); holder.textView = (TextView) convertView.findViewById(R.id.textView1); // 파싱된 결과를 holder 에 담아서 tag 로 저장해둡니다. convertView.setTag(holder); convertView.setId(R.layout.list_item); } else { // 재사용할 view 가 있을경우 해당 view 의 tag 를 가져와서 ItemHolder 로 캐스팅하여 사용합니다. holder = (ItemHolder) convertView.getTag(); } // 여기부터는 얻어온 holder 를 이용하여 데이터를 채웁니다. holder.textView.setText(getItem(position).toString()); return convertView; } |
이런 형태를 취하는 이유는 안드로이드에서 시간이 가장 오래걸리는 작업중의 하나가 findViewById 메소드를 이용한 xml 파싱작업 이기 때문에 해당 메소드의 호출을 최소화 하기 위함입니다.
'알짜정보 > Android' 카테고리의 다른 글
android 에서 xml 을 이용해 이미지 전환 효과주기 (81) | 2011.07.14 |
---|---|
android 에서 xml 을 이용한 animation 처리 (32) | 2011.07.14 |
Lazy 오목 Online! for android and web (ver 2.2 ad) (108) | 2011.02.14 |
android CustomView 생성하기 (69) | 2011.01.07 |
android TabActivity 의 이해 (116) | 2011.01.05 |
RECENT COMMENT