在不触发 onCheckChanged 的情况下更改复选框值

新手上路,请多包涵

我已经为我的 setOnCheckedChangeListener 实施了 checkbox

有什么办法可以打电话

checkbox.setChecked(false);

不触发 onCheckedChanged

原文由 Archie.bpgc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

不,你不能这样做。 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;
    }
}

原文由 Shade 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 OnCheckedChangeListener 中添加此代码:

 if(!compoundButton.isPressed()) {
            return;
}

这将帮助我们弄清楚天气复选框状态是通过编程方式还是通过用户操作更改的。

原文由 krisDrOid 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题