在最近的一个项目中 需要在listview中的item 自定义布局中使用checkbox,本以为会很简单。代码就不上了。出现了滑动listview中 checkbox 选中结果错位的问题。
查了很多资料,各种方法都尝试了一遍还是不行。但是最后还是stackflow 找到了一个可以解决的方案。
因为我在自己的自定义Adapter 中 利用ViewHolder 来保存View 信息,但是由于 我每次都是使用的一个setOnCheckedChangeListener,而ListView 由于对于控件的复用,导致在滚动过程中触发了OnCheckedChangeListener。所以最后的解决方案比较简单,就是
viewholder.cb_sel.setOnCheckedChangeListener(null);
if(mContacter.isSelected()){
viewholder.cb_sel.setChecked(true);
}else
viewholder.cb_sel.setChecked(false);
viewholder.cb_sel.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mContacter.setSelected(isChecked);
if (isChecked) {
array_receiver.add(mContacter);
}else{
try {
array_receiver.remove(array_receiver.indexOf(mContacter));
} catch (Exception e) {
// TODO: handle exception
}
}
}
});