经研究,CheckBox的onCheckedChanged方法在Recycleview的item销毁时会再次调用一次
因为在滑动过程中,item销毁后整体数据要与外面的Adapter数据一致,所以如果只是单纯在item里改变,那么在销毁时CheckBox就会变回原型而再次调用onCheckedChanged方法。
——————————————————————————————————————
个人解决办法:自定义ViewGroup包裹住CheckBox,让自定义ViewGroup来改变和保存CheckBox的状态,不让CheckBox做事。
public class KangLayout extends LinearLayout {
.....省略三个构造方法
//拦截事件,不让CheckBox拿到事件
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}
}
在Adapter中:
@Override
public void onBindViewHolder(ViewHolder holder, final int i) {
....省略业务代码
holder.checkbox.setChecked(list.get(i).isSelect());
holder.kangLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (holder.checkbox.isChecked()){
holder.checkbox.setChecked(false);
list.get(i).setSelect(false);
} else {
holder.checkbox.setChecked(true);
list.get(i).setSelect(true);
}
}
});
}