ListView의 경우 가려져 있다가 보이는 경우
기존 뷰를 재사용해서 표시한다고 한다.
else 부분의 루틴을
vh = (ViewHolder) convertView.getTag();
와 같이 처리했을 경우
동일한 내용이 반복해서 보일 수 있다.노란색 음영으로 되어 있는 저 부분이
핵심이다.
결론적으로 재사용된 뷰의 표시내용을 변경해주면
해결된다.
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if(convertView==null){
vh = new ViewHolder();
convertView =(LinearLayout) inflater.inflate(R.layout.list_menu, null);
vh.mText=(TextView) convertView.findViewById(R.id.Name);
vh.mImage=(ImageView) convertView.findViewById(R.id.Icon);
vh.mCheckBox=(CheckBox) convertView.findViewById(R.id.mCheckbox);
convertView.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
vh.mText.setText(mName.get(position));
vh.mImage.setImageDrawable(mIcon.get(position));
vh.mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton check, boolean isChecked) {
if(check.isChecked()){
Toast.makeText(mContext, "..."+mName.get(position)+"..."+position, Toast.LENGTH_SHORT).show();
}
}
});
return convertView;
}
댓글 없음:
댓글 쓰기