不,你做不到。 onCheckedChanged方法直接从setChecked调用。 你可以做的是以下几点:
mCheck.setOnCheckedChangeListener (null); mCheck.setChecked (false); mCheck.setOnCheckedChangeListener (mListener);
查看CheckBox的来源 ,并执行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; } }
你只需使用setonclickListener,它会正常工作,这是非常简单的方法,谢谢:)
另一种可能的方法是通过使用自定义CheckBox:
public class CheckBox extends AppCompatCheckBox { private OnCheckedChangeListener mListener; public CheckBox(final Context context) { super(context); } public CheckBox(final Context context, final AttributeSet attrs) { super(context, attrs); } public CheckBox(final Context context, final AttributeSet attrs, final int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void setOnCheckedChangeListener(final OnCheckedChangeListener listener) { mListener = listener; super.setOnCheckedChangeListener(listener); } public void setChecked(final boolean checked, final boolean alsoNotify) { if (!alsoNotify) { super.setOnCheckedChangeListener(null); super.setChecked(checked); super.setOnCheckedChangeListener(mListener); return; } super.setChecked(checked); } public void toggle(boolean alsoNotify) { if (!alsoNot