在recycleview列表中有CheckBox,在使用中,有些操作,无可避免的要刷新适配器,这样需要一个变量记录上一状态是否被选中了,在hodler中需要这样cbCheckShop.setChecked(model.isCheck);//适配器刷新后还原勾选状态
有这么一个场景,我需要点击CheckBox之后去刷新适配器,马上就想到了 setOnCheckedChangeListener,于是有以下代码:
binding.cbCheckShop.setChecked(model.isCheck);//适配器刷新后还原勾选状态
binding.cbCheckShop.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
model.isCheck=isChecked;
model.setCheck();
RxBus.getDefault().post(RxCodeConstants.SHOP_CART,1);//刷新适配器
}
});
然后。。。。问题来了,死循环。
当调用这句话setChecked(model.isCheck)的时候 setOnCheckedChangeListener执行了,而里面又有刷新适配器的代码,下一轮又走setChecked(model.isCheck);不断的死循环,game over
最后这样做:
binding.cbCheckShop.setChecked(model.isCheck);//适配器刷新后还原勾选状态
/* binding.cbCheckShop.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
model.isCheck=isChecked;
model.setCheck();
RxBus.getDefault().post(RxCodeConstants.SHOP_CART,1);//刷新适配器
}
});*/
binding.cbCheckShop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
model.isCheck=!model.isCheck;
model.setCheck();
RxBus.getDefault().post(RxCodeConstants.SHOP_CART,1);
}
});