Change Checkbox value without triggering onCheckChanged

前端 未结 19 1065
广开言路
广开言路 2020-11-30 00:18

I have setOnCheckedChangeListener implemented for my checkbox

Is there a way I can call

checkbox.setChecked(false);
         


        
19条回答
  •  囚心锁ツ
    2020-11-30 00:34

    No, you can't do it. The onCheckedChanged method is called directly from setChecked. What you can do is the following:

    mCheck.setOnCheckedChangeListener (null);
    mCheck.setChecked (false);
    mCheck.setOnCheckedChangeListener (mListener);
    

    See the source of CheckBox, and the implementation of setChecked:

    public void  setChecked(boolean checked) {
        if (mChecked != checked) {
            mChecked = checked;
            refreshDrawableState();
    
            // Avoid infinite recursions if setChecked() is called from a listener
            if (mBroadcasting) {
                return;
            }
    
            mBroadcasting = true;
            if (mOnCheckedChangeListener != null) {
                mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
            }
    
            if (mOnCheckedChangeWidgetListener != null) {
                mOnCheckedChangeWidgetListener.onCheckedChanged(this, mChecked);
            }
    
            mBroadcasting = false;            
        }
    }
    

提交回复
热议问题