Android - How to hide menu option for current fragment

android, android-fragments

Solution

First get the item you want to remove :

MenuItem item = menu.findItem(R.id.your_action);

then set it's Visibility `false` :

item.setVisible(false);

and if the problem is in getting the menu (as it's not in the fragment), you can easily get a `context` from the activity that contains the menu and get the menu by it.

Problem

I have an ActionBar activity with a FrameLayout and a menu. when the user clicks the menu item I replace the fragment with the relevant new fragment. However, I cannot see an obvious way to remove the menu item for the selected fragment. ``` public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { StudyFragment startFragment = new StudyFragment(); startFragment.setArguments(getIntent().getExtras()); getSupportFragmentManager().beginTransaction().add (R.id.container, startFragment).commit(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_study: replaceFragment((Fragment)new StudyFragment()); break; case R.id.action_list: replaceFragment((Fragment)new ListFragment()); break; // etc } return super.onOptionsItemSelected(item); } private void replaceFragment(Fragment f) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.container, f); transaction.addToBackStack(null); transaction.commit(); } ``` The Google documentation on changing menus says to disable the menu in onPrepareOptionsMenu - but how will I know which item has been selected? --Solution Implemented-- Using Muhammed Refaat's solution below I added two new members to the class: ``` private Menu activityMenu; private MenuItem curMenuItem; ``` Set them in onCreateOptionsMenu ``` activityMenu = menu; curMenuItem = activityMenu.findItem(R.id.action_study); curMenuItem.setVisible(false); ``` And changed them on onOptionsItemSelected ``` curMenuItem.setVisible(true); curMenuItem = activityMenu.findItem(id); curMenuItem.setVisible(false); ```

Original source