我在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
将被完全忽略。