Reputation: 319
I have a menu with three items, each one is shown alone with a screen. I call invalidateOptionMenu() in the second screen to refresh the action bar color. The color change does work pretty well in both 4.1.2 and 4.3 versions.
But on Android 4.3, when I call this, the item of the first screen is shown on the second screen.
Here is my code this is in (@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)));
}
and even if I try that after it doesn't work:
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
And here is how I override 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;
}
Upvotes: 0
Views: 582
Reputation: 13731
In onCreateOptionsMenu you should just inflate your menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
in onPrepareOptionsMenu you should change menu items visibility by some condition
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);;
}
To update your menu you should call invalidateOptionMenu(), this calls onPrepareOptionsMenu and menu redraw again
Upvotes: 1