Commonlife's Blog

My daily life

2개 이상의, 복수개의 레이아웃을 가진 ListView에서 ViewHolder 사용하기

leave a comment »

ListView를 활용하다 보면 거의 대부분이 두 개이상의 아이템 레이아웃을 활용할 때가 많다.

그럴 때면 ViewHolder를 활용하기가 참 난감하다. 하지만 메모리를 생각하면 ViewHolder를 활용해야 할텐데, 그게 잘 되지 않으니 고민이 깊어진다.

하지만 아래와 같이 활용하면 가능하다.

if (type == LIST_TYPE_01) {
    if (convertView == null) {
        separatorHolder = new SeparatorViewHolder();
        convertView = mInflater.inflate(R.layout.layout_01, null);
        separatorHolder.text = (TextView) convertView.findViewById(R.id.header_name);
        convertView.setTag(separatorHolder);
    } else {
        if (convertView.getTag() instanceof SeparatorViewHolder) {
            separatorHolder = (SeparatorViewHolder) convertView.getTag();
        } else {
            separatorHolder = new SeparatorViewHolder();
            convertView = mInflater.inflate(R.layout.layout_01, null);
            separatorHolder.text = (TextView) convertView.findViewById(R.id.header_name);
            convertView.setTag(separatorHolder);
        }
    }
    // layout 구현
} else {
    if (convertView == null) {
        secondViewHolder = new SecondViewHolder();
        convertView = mInflater.inflate(R.layout.layout_2, null);
        secondViewHolder.frameLayout = (FrameLayout) convertView.findViewById(R.id.frame_layout);
        secondViewHolder.text = (TextView) convertView.findViewById(R.id.text_view);
        secondViewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.check_box);
        convertView.setTag(secondViewHolder);
    } else {
        if (convertView.getTag() instanceof SecondViewHolder) {
            secondViewHolder = (SecondViewHolder) convertView.getTag();
        } else {
            secondViewHolder = new SecondViewHolder();
            convertView = mInflater.inflate(R.layout.layout_2, null);
            secondViewHolder.frameLayout = (FrameLayout) convertView.findViewById(R.id.frame_layout);
            secondViewHolder.text = (TextView) convertView.findViewById(R.id.text_view);
            secondViewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.check_box);
            convertView.setTag(secondViewHolder);
        }
    }
    // layout 구현
}

convertView.getTag()를 호출하기 전에 getTag()에 의해 return되는 객체가 사용하려는 ViewHolder가 맞는 지 체크하고 아닌 경우엔 새롭게 ViewHolder를 만드는 것이다.

Advertisements

Written by tocommonlife

2012/08/03 , 시간: 09:16

Android에 게시됨

Tagged with ,

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: