2015-09-25 74 views
2

我在我的ActionBar中有一個菜單,它是可檢查的(以XML格式),但是當我嘗試在java中檢查它按下這個項目時,項目保持未選中狀態與此相關的動作完成)安卓系統,可檢查菜單項

我的XML菜單:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools"> 
    [...] 
    <item 
     android:id="@+id/menu_switch_full_original" 
     android:title="@string/menu_switch_full_original" 
     android:checkable="true"/> 
</menu> 

和Java代碼:

public boolean onOptionsItemSelected(MenuItem item) { 
    if (mEntriesIds != null) { 
     Activity activity = getActivity(); 

     switch (item.getItemId()) { 
      [...] 
      case R.id.menu_switch_full_original: { 
       item.setChecked(true); 
       [...] 
     } 
     activity.invalidateOptionsMenu(); 
    } 
    return true; 
} 

我缺少什麼?

回答

1

嘗試......

private boolean isChecked = false; 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     MenuItem checkable = menu.findItem(R.id.menu_switch_full_original); 
     checkable.setChecked(isChecked); 
     return true; 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // TODO Auto-generated method stub 
     getMenuInflater().inflate(R.menu.a, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 
     switch (item.getItemId()) { 
     case R.id.menu_switch_full_original: 
      isChecked = !item.isChecked(); 
      item.setChecked(isChecked); 
      // your other functionality 
      break; 

     default: 
      break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
+0

謝謝,完美:) – griffin

+0

你知不知道這應該使用invalidateOptionsMenu? –