대용량 checkedbox list 에 대한 해결
대용량 checkedbox list 에 대한 해결
일반적으로 아래와 같이 convertView를 재활용 하고 viewHolder를 사용하여 multicheckbox를 구현시 문제되는 현상을 다음과 같이 해결해 본다.
해당 타이틀 정보에 check 유무를 판단하여 setOnClickListener 에서 체크되도록 설정한다.
말보다 소스다 ㅎㅎㅎ
public class ClientListCheckAdapter extends ArrayAdapter
private Context context;
private ArrayList
private int resouce;
private HashMap
public ClientListCheckAdapter(Context context, int textViewResourceId,
ArrayList
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;
}
댓글
댓글 쓰기