我这样定义了一个MenuItem:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_starred"
android:icon="@drawable/btn_star"
android:title="@string/description_star"
android:checkable="true"
android:checked="true"
android:orderInCategory="1"
android:showAsAction="always" />
</menu>
并且 btn_star.xml
是这样定义的:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="false"
android:drawable="@drawable/btn_star_off_normal" />
<item
android:state_checked="true"
android:drawable="@drawable/btn_star_on_normal" />
</selector>
然而,如果我使用这个方法创建一个选项菜单,无论 MenuItem
的 isChecked()
属性是否为 true,其图标都不会显示为已选择状态。
我正在使用 ActionBarSherlock 控件,但是,即使我只是创建一个普通的选项菜单并调用 setChecked(true)
,我仍然得到相同的结果。它仍然显示 btn_star_off
可绘制对象,而不管该项的选择状态如何。
onOptionsItemSelected()
方法被正确地调用,我可以成功地更改已选择属性:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.isCheckable()) {
item.setChecked(!item.isChecked());
}
return super.onOptionsItemSelected(item);
}
在这里设置断点,可以看到isChecked属性被更改了,但图标本身没有更新以反映正确的状态。
我是否遗漏了什么?我做错了什么吗?我无法弄清楚为什么这样不正确地工作。