Hide MenuItem in some Fragments

android, android-fragments, android-optionsmenu

Solution

In the `Fragment` where you don't want to show any menu options, you need `setHasOptionsMenu(false);` in the `onCreate()`, like this:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(false);
}

However, the menu that is being shown that you would like to hide (REFRESH), belongs to MainActivity. That is why it is always shown. Since you want to control the menu at the `Fragment` level (and not show an `Activity` options menu), my suggestion is to delete the menu code from the `Activity` and implement it in your `Fragment`.

`Activity`s and `Fragment`s can each have their own separate menus. See this link.

Problem

I using menu drawer which has more `Fragment`s. In some `Fragment`s I have menu item REFRESH but in some fragments I want hide this menu item (I don't want show menu but I don't want hide `ActionBar`). I try add override `onCreateOptionsMenu()` to `Fragment` where I don't want show this menu item but I can not get it to work. I try many way see commented line in code. Does any idea where is problem? And last this menu item go to hide when I activate menu drawer when is called `onPrepareOptionsMenu()` in MainActivity but I need do this when I'm in `Fragment`. `Fragment` where I want hide menu item REFRESH: ``` public class FindPeopleFragment extends Fragment { public FindPeopleFragment(){} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_find_people, container, false); //setHasOptionsMenu(false); return rootView; } private Menu menu=null; @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main, menu); this.menu=menu; menu.findItem(R.id.refresh).setVisible(false); getActivity().invalidateOptionsMenu(); //setHasOptionsMenu(false); super.onCreateOptionsMenu(menu,inflater); } } ``` MainActivity where is defined MENU DRAWER: ``` //Slide menu item click listener private class SlideMenuClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // display view for selected nav drawer item displayView(position); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // toggle nav drawer on selecting action bar app icon/title if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case R.id.refresh: Toast.makeText(this, "Refreshing data...", Toast.LENGTH_SHORT).show(); return true; } return super.onOptionsItemSelected(item); } // Called when invalidateOptionsMenu() is triggered @Override public boolean onPrepareOptionsMenu(Menu menu) { // if nav drawer is opened, hide the action items boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.refresh).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } ```

Original source