2011-09-18 66 views
1

我得到了一個添加了值的子菜單,然後我想通過讀取包含當前視圖模式的currentViewMode變量來設置它們......下面的代碼必須檢查第一個,但它沒有。請指教。子菜單設置複選框

private enum ViewMode 
{ 
    NORMAL, 
    SATELLITE, 
    HYBRID 
} 
private ViewMode currentViewMode = ViewMode.NORMAL; 

private final int SUB_MENU_GROUP = 1; 
private final int SUB_MENU_ITEM_NORMAL = 1; 
private final int SUB_MENU_ITEM_SATELLITE = 2; 
private final int SUB_MENU_ITEM_HYBRID = 3; 

public boolean onCreateOptionsMenu(Menu menu) { 
    SubMenu sub = menu.addSubMenu(0, 1, 0, R.string.menu_mapwindow_viewmode).setIcon(R.drawable.ic_menu_refresh); 
    sub.add(SUB_MENU_GROUP, SUB_MENU_ITEM_NORMAL, Menu.NONE, this.getString(R.string.mapwindow_viewmode_normal)); 
    sub.add(SUB_MENU_GROUP, SUB_MENU_ITEM_SATELLITE, Menu.NONE, this.getString(R.string.mapwindow_viewmode_satellite)); 
    sub.add(SUB_MENU_GROUP, SUB_MENU_ITEM_HYBRID, Menu.NONE, this.getString(R.string.mapwindow_viewmode_hybrid)); 
    sub.setGroupCheckable(SUB_MENU_GROUP, true, true); 

    if (this.currentViewMode == ViewMode.NORMAL) 
     sub.findItem(SUB_MENU_ITEM_NORMAL).setChecked(true); 
    else if (this.currentViewMode == ViewMode.SATELLITE) 
     sub.findItem(SUB_MENU_ITEM_SATELLITE).setChecked(true); 
    else if (this.currentViewMode == ViewMode.HYBRID) 
     sub.findItem(SUB_MENU_ITEM_HYBRID).setChecked(true); 

    return super.onCreateOptionsMenu(menu); 
} 

    @Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) 
    { 
     case SUB_MENU_ITEM_NORMAL: 
      item.setChecked(!item.isChecked()); 
      this.currentViewMode = ViewMode.NORMAL; 
      Log.i(this.getClass().getName(), "Normal"); 
      break; 
     case SUB_MENU_ITEM_SATELLITE: 
      item.setChecked(!item.isChecked()); 
      this.currentViewMode = ViewMode.SATELLITE; 
      Log.i(this.getClass().getName(), "Satellite"); 
      break; 
     case SUB_MENU_ITEM_HYBRID: 
      item.setChecked(!item.isChecked()); 
      this.currentViewMode = ViewMode.HYBRID; 
      Log.i(this.getClass().getName(), "Hybrid"); 
      break; 
     default: 
      super.onOptionsItemSelected(item); 
    } 
    return true; 
} 

回答

0

你應該在onPrepareOptionsMenu(而不是onCreateOptionsMenu)複選框更新,因爲它會在每次打開的菜單上調用。 創建僅在第一個之前調用。 (它不知道這是否會導致你的問題,但是可能的,所以值得一試,並且使你的代碼更安全,無論如何)

+0

謝謝我發現我的onOptionsItemSelected火,怪異! – Lennie