I have looked through the questions on stack overflow and can't find the solution.
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.themenu, menu);
MenuItem item = menu.findItem(R.id.menu_settings);
MenuItem item2 = menu.findItem(R.id.menu_save);
item.setVisible(isdown);
item2.setVisible(isdown);
return true;
}
This sets my menu items to visible (item1 and item2). the onclick works fine
public void inflateTextarea() {
if(isdown == true) {
isdown = false;
LinearLayout tl = (LinearLayout)findViewById(R.id.content);
tl.setVisibility(View.VISIBLE);
ScaleAnimation scale = new ScaleAnimation(1, 1, 0, 1);
scale.setFillAfter(true);
scale.setDuration(500);
tl.startAnimation(scale);
}
}
Then this sets my isdown boolean to false. on stack people say that the onPrepareOptionsMenu should fire everytime I click but this is not the case.
I am able to hide one menu item on the onclick function
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_settings:
Log.v("Log:","edit_item pressed");
return true;
}
}
But I have multiple menu items that I need to hide and others that I want to show.
how can I go about this?
Its not enough to change the isDown
variable. You have to call the setVisible()
method every time you want to change the visibility. That method does more than just setting a boolean value, so just changing a boolean value will not do.
After changing the isDown
value to false, you need to call invalidateOptionsMenu()
which will re-launch the menu by calling onPrepareOptionsMenu()
again.
Try this code for making the menu items unvisible:
...
isdown = false;
invalidateOptionsMenu();
...
Try this,
private Menu menu=null;
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater)
{
inflater.inflate(R.menu.note_menu, menu);
this.menu=menu;
super.onCreateOptionsMenu(menu,inflater);
menu.findItem(R.id.menuChartNoteEdit).setVisible(isdown);
menu.findItem(R.id.menuChartOpenNote).setVisible(isdown);
}
When you want to hide menu at any where, after executing onCreateOptionsMenu()
then just change value for isdown
and repeat this code,
menu.findItem(R.id.menu_settings).setVisible(isdown);
menu.findItem(R.id.menu_save).setVisible(isdown);
Try this in your FragmentActivity
public boolean onPreparePanel(int featureId, View view, Menu menu) {
if(isLeftMenuOpened()) return false;
return super.onPreparePanel(featureId, view, menu);
}
Method FragmentActivity.onPreparePanel creates menu for all attached fragments. You must return true for the menu to be displayed; if you return false it will not be shown.
I have a menu with two items, first: save item, second: edit item. I wanted when I came in to edit, at first "save item" had been hidden, and when I click "edit item", "save item" was shown.
So:
- declare an item in public
- set value to it in
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
- set visibility to
isHidden()
- then every where I wanted, set visibility to
isVisible()
Public region:
MenuItem saveItem;
onCreateOptionsMenu:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_detail_products, menu);
saveItem = (MenuItem) menu.findItem(R.id.action_detail_product_save);
saveItem.setVisible(isHidden());
}
Where i want:
saveItem.setVisible(isVisible());
Finally it works as I wanted.