Trying to hide and show menu items on action bar
Solution 1
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();
...
Solution 2
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);
Dnaso
What I am good at: Objective-C PHP JavaScrpipt Java HTML/CSS Video Streaming Linux Scripting
Updated on July 05, 2022Comments
-
Dnaso almost 2 years
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?
-
Dnaso about 11 yearsyes I know that, but as i read the onPrepareOptionsMenu(Menu menu) { is supposed to fire everytime a menu item is clicked and THAT would work. I cant set the visibility unless I have Menu menu in the function, so that is where I am having a problem
-
Dnaso about 11 yearsi heard the onPrepareOptionsMenu was supposed to be better, do you know what the difference is?
-
Dnaso about 11 yearsok so now i can put my menu.find item in any function in my class?
-
tbkn23 about 11 yearsI see. Edited post to cover this.
-
Sino Raj about 11 yearsyes, find Menu Item in any where on your class and hide/show..!, Are you check that?
-
Dnaso about 11 yearsAHHH thats what I was looking for. I will try if it works ill accept thank you.
-
Dnaso about 11 yearsi will try it out if it works will up vote thank you so much give me a few hours
-
Dnaso about 11 yearswhere do i add the invalidateOptionsMenu() method?
-
tbkn23 about 11 yearsAnywhere within the activity after you change the value of isDown to false
-
Dnaso about 11 yearsboth worked but the other answer by invalidating the menu is more efficient thank you.
-
Dnaso about 11 yearsnvm found it. i had to add a suppression for new api so i put the invalidation in its own function just incase. thank you
-
Muhammad Babar over 9 years
invalidateOptionsMenu();
requires API 11. also to hide/show one item i don't think its good option to invalidate whole options menu!