I had a problem setting up some fragment menu items in the ActionBar
and I found a way to solve it, but I don't understand why it worked.
I wanted to change the visibility in a menu item right after I inflated it from a menu xml file in onCreateOptionsMenu
method. The code seems to work fine, but there's no visible effect. I solved the problem inflating the menu in onCreateOptionsMenu
method but changing the visibility of it in onPrepareOptionsMenu
method.
What I want to know is why changing the visibility in onCreateOptionsMenu
does not work.
What can I do in onPrepareOptionsMenu
that I can't do in onCreateOptionsMenu
?
Is there any pattern to follow here?
Thanks!
Here's the relevant code, just in case:
public class MyFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.my_menu, menu);
// This does not work, compiles and runs fine, but has no visible effect
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// This does work
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
}