返回介绍

设置选中 checked 状态

发布于 2024-12-23 21:01:01 字数 1428 浏览 0 评论 0 收藏 0

public void setChecked(boolean checked) {
  if (mChecked != checked) {
    mChecked = checked;
    refreshDrawableState();
    notifyViewAccessibilityStateChangedIfNeeded(
        AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);

    // 避免多次调用 setChecked() 来多次调用回调监听
    if (mBroadcasting) {
      return;
    }

    mBroadcasting = true;
    if (mOnCheckedChangeListener != null) {
      mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
    }
    if (mOnCheckedChangeWidgetListener != null) {
      mOnCheckedChangeWidgetListener.onCheckedChanged(this, mChecked);
    }

    mBroadcasting = false;      
  }
}


// 设置监状态听
public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
  mOnCheckedChangeListener = listener;
}

void setOnCheckedChangeWidgetListener(OnCheckedChangeListener listener) {
  mOnCheckedChangeWidgetListener = listener;
}

设置状态,就是传入一个 Boolean 值来设置状态,如果和初始化的 mChecked 相反,才会调用,然后调用 refreshDrawableState() 来刷新绘制的状态,然后下面就是设置状态改变的监听,通过 mBroadcasting 属性来避免多次设置回调,每次调用 mBroadcasting,如果为 true,则返回。

发现有两个监听,我们仔细看下面 setXxxListener() 的方法,而下面那个 setOnCheckedChangeWidgetListener() 方法不是 Public,所以说不是对外开放的,我们是不能调用的,文档中说明是仅供内部使用。因此我们想要监听选中状态,可以使用 setOnCheckedChangeListener()。

重写 onCheckedChanged(CompoundButton buttonView, boolean isChecked) ​ 即可。对了,除了 setChecked() 可以设置状态,toggle() 每次也会 setChecked() 方法,每次都会讲状态设置为相反的。还有 isChecked() 方法,判断当前的选中状态。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文