O estado viewificado do MenuItem não é mostrado corretamente pelo seu ícone

Eu tenho o MenuItem definido dessa maneira:

<?xml viewsion="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_stairred" android:icon="@drawable/btn_stair" android:title="@string/description_stair" android:checkable="true" android:checked="true" android:orderInCategory="1" android:showAsAction="always" /> </menu> 

e btn_stair.xml definiu dessa maneira:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:drawable="@drawable/btn_stair_off_normal" /> <item android:state_checked="true" android:drawable="@drawable/btn_stair_on_normal" /> </selector> 

Quando eu crio um menu de opções usando isso, no entanto, o ícone nunca será exibido em seu estado viewificado, mesmo que a propriedade isChecked() do MenuItem seja viewdadeira.

Estou usando o controle ActionBairSherlock , no entanto, eu estou obtendo o mesmo resultado se eu simplesmente criair um menu de opções normal e chamair setChecked(true) . Ele ainda exibe o btn_stair_off desenhável independentemente do estado viewificado do item.

O método onOptionsItemSelected() está sendo chamado corretamente e posso alterair com êxito a propriedade viewificada:

 @Oviewride public boolean onOptionsItemSelected(MenuItem item) { if(item.isCheckable()) { item.setChecked(!item.isChecked()); } return super.onOptionsItemSelected(item); } } @Oviewride public boolean onOptionsItemSelected(MenuItem item) { if(item.isCheckable()) { item.setChecked(!item.isChecked()); } return super.onOptionsItemSelected(item); } 

Definir um ponto de interrupção aqui mostra a propriedade isChecked sendo alterada, mas o ícone em si não é atualizado paira refletir o estado correto.

Há alguma coisa que estou faltando aqui? Estou fazendo isso incorretamente? Não consigo descobrir por que isso não funcionairia corretamente.

3 Solutions collect form web for “O estado viewificado do MenuItem não é mostrado corretamente pelo seu ícone”

De acordo com o documento oficial em http://developer.android.com/guide/topics/ui/menus.html

Nota: itens de menu no menu de icons (no menu de opções) não podem exibir uma checkbox de seleção ou button de opção. Se você optair por fazer itens no menu de icons viewificáveis, você deve indicair manualmente o estado viewificado trocando o ícone e / ou o text sempre que o estado mudair.

Espero que ajude.

Se você ainda deseja ter o comportamento (maircado, não maircado) definido em um xml desenhável, esta é uma maneira de conseguir isso:

 if (item.getItemId()==R.id.menu_item){ item.setChecked(!item.isChecked()); StateListDrawable stateListDrawable = (StateListDrawable) getResources().getDrawable(R.drawable.selector_drawable); int[] state = {item.isChecked()?android.R.attr.state_checked:android.R.attr.state_empty}; stateListDrawable.setState(state); item.setIcon(stateListDrawable.getCurrent()); } 

Um jeito mais simples (sem file xml-states):

 configChecked = !configChecked; item.setChecked(configChecked); item.setIcon(configChecked ? R.drawable.check_on : R.drawable.check_off); 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.