리스트뷰, 체크박스, 그리고 체크 체인지 리스너
다음은 ListAdapter의 아이템 뷰를 가져오는 부분이다.
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.listitem, parent, false);
}
TextView txt1 = (TextView) convertView.findViewById(R.id.txt1);
TextView txt2 = (TextView) convertView.findViewById(R.id.txt2);
CheckBox chk1 = (CheckBox) convertView.findViewById(R.id.chk1);
IType type = (IType) getItem(position);
txt1.setText(type.getName(pref.isPreferUnicode()));
chk1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
((IType) getItem(position)).setHidden(!isChecked);
}
});
chk1.setChecked(!type.isHidden());
txt2.setText(type.getHalfStepString());
return convertView;
}
리스트 아이템의 레이아웃에 체크박스가 포함되어 있는데,
리스너 장착 부분과 체크 상태 설정 부분의 순서가 매우 중요하다. 파란 부분이다.
왜 그런 건진 알 수 없으나,
이 순서가 바뀌면 체크박스가 지 맘대로 작동한다.
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.listitem, parent, false);
}
TextView txt1 = (TextView) convertView.findViewById(R.id.txt1);
TextView txt2 = (TextView) convertView.findViewById(R.id.txt2);
CheckBox chk1 = (CheckBox) convertView.findViewById(R.id.chk1);
IType type = (IType) getItem(position);
txt1.setText(type.getName(pref.isPreferUnicode()));
chk1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
((IType) getItem(position)).setHidden(!isChecked);
}
});
chk1.setChecked(!type.isHidden());
txt2.setText(type.getHalfStepString());
return convertView;
}
리스트 아이템의 레이아웃에 체크박스가 포함되어 있는데,
리스너 장착 부분과 체크 상태 설정 부분의 순서가 매우 중요하다. 파란 부분이다.
왜 그런 건진 알 수 없으나,
이 순서가 바뀌면 체크박스가 지 맘대로 작동한다.
댓글
댓글 쓰기