setChecked(false) is the same as setChecked(true)?



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

但是,它看起来像:

For checkableBehavior="single" setChecked()将始终检查菜单项目,即使参数为'false',因为谷歌实现。

我明显的解决方案是添加一个no filter项,可以由用户检查,以表明他们不想要一个过滤器,但它似乎更直观地检查和取消检查同一项,它有另一种方法来setChecked(false) ?

Google在MenuItemImpl中的脑残实现(与牛轧糖一样):

@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;
}

注意,当设置EXCLUSIVE标志时,checked将被完全忽略。

最新更新