【问题标题】:setChecked(false) is the same as setChecked(true)?setChecked(false) 和 setChecked(true) 一样吗?
【发布时间】:2016-09-21 12:38:25
【问题描述】:

我在group 中使用android:checkableBehavior="single",这个组包含很少的项目,这些项目代表内容过滤器,没有默认过滤器(意味着不一定总是有一个选中的项目,至少那是什么我想要),如果我点击一个过滤器并想要禁用它,我可以再次点击它,我的期望是使用setChecked(false) 将取消选中该项目。

但是,it looks like:

对于 checkableBehavior="single" setChecked() 将始终检查菜单 即使由于 Google 实施,参数为 'false' 的项目。

我明显的解决方案是添加一个no filter 项目,用户可以检查该项目以表明他们不需要过滤器,但检查和取消选中同一项目似乎更直观,@987654326 还有另一种方法@?

【问题讨论】:

  • 使用复选框并有问题地管理选中/未选中
  • 对于什么是直观,我们肯定有不同的想法。
  • @EugenPechanec 所以你建议no filter 选项?
  • @AnandSavjani 你能给我举个例子吗...
  • 要么没有过滤选项,要么摆脱 RadioGroup 并自己处理(取消)选择其他项目。

标签: android


【解决方案1】:

Google 在MenuItemImpl 中的脑死实现(截至 Nougat):

@Override
public MenuItem setChecked(boolean checked) {
    if ((mFlags & EXCLUSIVE) != 0) {
        // Call the method on the Menu since it knows about the others in this
        // exclusive checkable group
        mMenu.setExclusiveItemChecked(this);
    } else {
        setCheckedInt(checked);
    }

    return this;
}

请注意,checked 在设置EXCLUSIVE 标志时会被完全忽略。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2012-04-21
    • 2011-05-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    相关资源
    最近更新 更多