精选圈子榜单优站
跟我一起AI炒ETF
赚大钱赚大钱赚大钱

CheckBox setOnCheckedChangeListener大坑


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

  • 若文章侵犯了您的权益,请联系站长处理:nemo@link-nemo.com

  • 2017-06-20
  • 2563阅读
评论