2012-11-06 58 views
1

我在onCreateOptionsMenu方法中遇到了此問題。我已經設置了它,因此它根據某些SharedPreferences的值啓用或禁用了選項,但出於某種原因,第一次打開菜單時它不能正常工作,應禁用的選項已啓用,另一個方式。如果我關閉並重新打開它,它可以正常工作。onCreateOptionsMenu無法正常工作

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    menuConfig(menu); 
    return true; 
} 

@Override 
public boolean onPrepareOptionsMenu (Menu menu) { 
    menuConfig(menu); 
    return true; 
} 

public void menuConfig(Menu menu){ 
    menu.getItem(getResources().getInteger(R.integer.MENU_ABOUT)).setEnabled(true); 
    if (preferences.getBoolean(getString(R.string.PREFS_STARTED), false)){ 
     menu.getItem(getResources().getInteger(R.integer.MENU_START)).setEnabled(false); 
     menu.getItem(getResources().getInteger(R.integer.MENU_STOP)).setEnabled(true); 
    }else{ 
     menu.getItem(getResources().getInteger(R.integer.MENU_START)).setEnabled(true); 
     menu.getItem(getResources().getInteger(R.integer.MENU_STOP)).setEnabled(false); 
    } 
    if(!preferences.getBoolean(getString(R.string.PREFS_STARTED),false) && preferences.getBoolean(getString(R.string.PREFS_FILES_CREATED),false)){ 
     menu.getItem(getResources().getInteger(R.integer.MENU_DELETE)).setEnabled(true); 
     menu.getItem(getResources().getInteger(R.integer.MENU_SET_ID)).setEnabled(true); 
    } 
    else{ 
     menu.getItem(getResources().getInteger(R.integer.MENU_DELETE)).setEnabled(false); 
     menu.getItem(getResources().getInteger(R.integer.MENU_SET_ID)).setEnabled(false); 
    } 
} 

這兩個圖片隨後在每個菜單按鍵之間用幾秒鐘時間拍攝。 First menu key press, WRONG Second menu key press, RIGHT

第一個是錯誤的,它應該看起來像第二個。

+0

我相信這是因爲我在調用menuConfig之前膨脹的事實,但我試圖用相反的方式做它,它崩潰了。 –

+0

我甚至嘗試通過菜單佈局xml強制初始狀態,並且它不起作用,這意味着偏好正在被讀取,但出於某種原因錯誤。 –

+0

即使調用create方法(只發生一次),也無需從onCreateOptionsMenu和onPrepareOptionsMenu調用'menuConfig'作爲prepare方法。所以你可以安全地從create方法中刪除調用。 – Ridcully

回答

0

我修改了查詢返回的默認值到SharedPreferences對象,但我不知道實際發生了什麼。