2013-10-21 109 views
0

我有一個包含三個項目的菜單,每個菜單都單獨顯示一個屏幕。我在第二個屏幕中調用invalidateOptionMenu()以刷新操作欄顏色。 顏色變化在4.1.2和4.3版本中都能很好地工作。在Android 4.3中調用invalidateOptionsMenu()時出現奇怪的行爲

但是在Android 4.3上,當我調用它時,第一個屏幕的項目顯示在第二個屏幕上。

這裏是我的代碼,這是在(@覆蓋公共無效的onClick(視圖v):

   if (android.os.Build.VERSION.SDK_INT >= 11){ 
       final ActionBar actionBar = getActionBar(); 
       this.invalidateOptionsMenu(); 
       actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(couleur))); 

      } 

即使我嘗試後,這是行不通的:

  final MenuItem saveNote = Menu.findItem(R.id.saveNote); 
      final MenuItem removeNote = Menu.findItem(R.id.deleteNote); 
      final MenuItem nouvelleNote = Menu.findItem(R.id.nouvelleNote); 

      nouvelleNote.setVisible(false); //screen 1 
      saveNote.setVisible(true); //screen 2 
      removeNote.setVisible(false); //screen 3 

而且這裏是我如何重寫onCreateOptionsMenu:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     Menu = menu; 
     getMenuInflater().inflate(R.menu.pumpkin_note, menu); 

     final MenuItem saveNote = Menu.findItem(R.id.saveNote); 
     final MenuItem removeNote = Menu.findItem(R.id.deleteNote); 
     final MenuItem nouvelleNote = Menu.findItem(R.id.nouvelleNote); 

     nouvelleNote.setVisible(true); 
     saveNote.setVisible(false); 
     removeNote.setVisible(false); 

     return true; 
    } 

回答

1

在onCreateOptionsMenu你應該只是擡高你的菜單

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 
在onPrepareOptionsMenu你應該通過一些條件

public boolean onPrepareOptionsMenu(Menu menu) {  
      menu.findItem(R.id.saveNote).setVisible(isFirstScreen); 
      menu.findItem(R.id.deleteNote).setVisible(isSecondScreen);; 
      menu.findItem(R.id.nouvelleNote).setVisible(isThirdScreen);; 
    } 

要更新你的菜單,你應該調用invalidateOptionMenu(),這就要求更改菜單項可視性

onPrepareOptionsMenu和菜單再重繪

相關問題