2012-10-14 26 views
9

我正在覆蓋onPrepareOptionsMenu以隱藏和顯示菜單項。使用API​​級別16仿真器進行測試時; onPrepareOptionsMenu在第一次打開菜單時不會被調用。但是,當我重新打開它的作品。問題僅在第一次使用時出現。你可以用這個簡單地測試它;第一次打開菜單時調用onPrepareOptionsMenu()的果凍豆

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    Toast.makeText(this.getActivity(), "pre", Toast.LENGTH_SHORT).show(); 
    super.onPrepareOptionsMenu(menu); 
} 

任何想法?

回答

17

onPrepareOptionsMenu()每次用戶打開薑餅和下面的菜單時都會調用。從Honeycomb開始,選項菜單被假定爲在項目出現在ActionBar中時始終處於打開狀態。

如果您想在活動期間以及onPrepareOptionsMenu()回撥期間更新選項菜單,您需要撥打invalidateOptionsMenu()並調用onPrepareOptionsMenu()

您是否可以在onCreateOptionsMenu()回調函中實現第一次使用的代碼?每次創建選項菜單時都會調用它,並在首次使用時創建它。

+0

invalidateOptionsMenu工作。 thx – syloc

+0

你從哪裏打來的? – Skynet

+0

來自您的活動。 – IKavanagh

5

這是Android的錯誤:https://code.google.com/p/android/issues/detail?id=24231

當你第一次按菜單鍵,通話invalidateOptionsMenu()supportInvalidateOptionsMenu()如果使用支持庫。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch(keyCode) { 
    case KeyEvent.KEYCODE_MENU: 
     if(mIsMenuFirstClick) { 
      mIsMenuFirstClick = false; 
      supportInvalidateOptionsMenu(); 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+2

精美的作品,謝謝!請注意,在某些情況下,它應該是'ActivityCompat.invalidateOptionsMenu(this);'。 – zelanix