대용량 checkedbox list 에 대한 해결


대용량 checkedbox list 에 대한 해결

일반적으로 아래와 같이 convertView를 재활용 하고 viewHolder를 사용하여 multicheckbox를 구현시 문제되는 현상을 다음과 같이 해결해 본다.

해당 타이틀 정보에 check 유무를 판단하여 setOnClickListener 에서 체크되도록 설정한다.

말보다 소스다 ㅎㅎㅎ


public class ClientListCheckAdapter extends ArrayAdapter {

private Context context;
private ArrayList mItems;
private int resouce;
private HashMap checkMap; //checkMap 정보를 담는 HashMap



public ClientListCheckAdapter(Context context, int textViewResourceId,
ArrayList dataItems, boolean isAllCheck) {


this.context = context;
this.mItems = dataItems;

inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

if(mItems == null){
mItems = new ArrayList();
}
// 전체 체크에 대한 설정

checkMap = new HashMap();
for(int i=0; i < mItems.size(); i++){
if(isAllCheck){
checkMap.put(i, true);
}else{
checkMap.put(i, false);
}
}



}


@Override
public View getView(final int position, View convertView,
ViewGroup parent) {

ClientListCheckViewHoloder viewHolder;

if (convertView == null) {
convertView = inflater.inflate(resouce, null);

viewHolder = new ClientListCheckViewHoloder();

viewHolder.mTitle = (RelativeLayout) convertView.findViewById(R.id.mTitle);
convertView.setTag(viewHolder);

} else {
viewHolder = (ClientListCheckViewHoloder) convertView.getTag();
}

viewHolder.mTitle.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
boolean isChecked = !checkMap.get(position);
checkMap.put(position, isChecked);
check.setChecked(isChecked);
}
});


}


public class ClientListCheckViewHoloder{
public RelativeLayout mTitle;
}

댓글

이 블로그의 인기 게시물

CoreOS Vagrant on Windows.md

The Docker User Guide

Install Docker