2016년 6월 20일 월요일

[안드로이드 개발] ListView의 항목이 중복해서 보일 때 해결방법


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;
}

댓글 없음:

댓글 쓰기