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
'sisChecked()
プロパティが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プロパティが変更されていることが示されますが、アイコン自体は正しい状態を反映するように更新されません。
ここに欠けているものはありますか?私はこれを間違ってやっていますか?なぜこれが正しく機能しないのか理解できません。