我有一个包含三个项目的菜单,每个项目都单独显示一个屏幕。我在第二个屏幕中调用invalidateOptionMenu()来刷新操作栏颜色。 颜色变化在4.1.2和4.3版本中都能很好地工作。
但是在Android 4.3上,当我调用它时,第一个屏幕的项目显示在第二个屏幕上。
这是我的代码(@Override public void onClick(View 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;
}
答案 0 :(得分: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并重新菜单重绘