android adapter안의 getView 깨알팁.
뭔가 listView든 GridView(이하 동적인 뷰) 든 adapter를 가지기 마련이고 여기안에 이미지를 등록할려고 한다고 가정을 합시다.
그리고 adapter가 불러오는 Image는 몇개가 올수 없다고 가정합디다.
그럼 흔히들 getView에서 ImageView를 변경할려고 할 것입니다...
이게 getView가 onCreate시에 각 아이템들에 한해서 호출된다면 상관없지만 동적인 뷰에 여기가 얽히고 저기가 얽혀서 getView의 호출숫자가 많아지게 되는경우, getView에서 이미지를 설정하는게 문제가 생길여지가 있습니다.
처음엔 이런식으로 코딩이 됬지만 이걸 우회하기 위해
xxxAdapter extends ArrayAdapter {
( ... )
@Overide
public void getView (convertView,poisition,parentView)
{
View view = LayoutInflater.from(context).inflate(R.layout.xxx,false);
final Item item = (Item) getItem(position);
...
ImageView img = (ImageView ) findViewbyId(R.id. image);
// img.setBackground 라든지 다른 방법이 있음을 가정
..
}
}다음과 같이 코딩하여 우회를 했습니다.
xxxAdapter extends ArrayAdapter<Item> {
( ... )
@Overide
public void getView (convertView,poisition,parentView)
{
View view = LayoutInflater.from(context).inflate(R.layout.xxx,false);
final Item item = (Item) getItem(position);
...
item.setImageView( (ImageView ) findViewbyId(R.id. image) ) ;
..
}
public void setImages(int position){
Item item = getItem(position);
// 이미지 업데이트
}
}
아랫쪽의 코딩을 별도의 스레드를 이용해서 어뎁터에서 이미지를 업데이트하면 끝!
-- 이상 오늘의 삽질