Hide/Show Action Bar Option Menu Item for different fragments
actionbarsherlock, android, android-fragmentactivity
Solution
This is one way of doing this:
add a "group" to your menu:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<group
android:id="@+id/main_menu_group">
<item android:id="@+id/done_item"
android:title="..."
android:icon="..."
android:showAsAction="..."/>
</group>
</menu>
then, add a
Menu menu;
variable to your activity and set it in your override of onCreateOptionsMenu:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
// inflate your menu here
}
After, add and use this function to your activity when you'd like to show/hide the menu:
public void showOverflowMenu(boolean showMenu){
if(menu == null)
return;
menu.setGroupVisible(R.id.main_menu_group, showMenu);
}
I am not saying this is the best/only way, but it works well for me.
Problem
I have a Sherlock Fragment Activity in which there are 3 Fragments. Fragment A, Fragment B, Fragment C are three fragments. I want to show a done option menu in Fragment B only. And the activity is started with Fragment A. When Fragment B is selected done button is added. ``` @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { if(!menusInflated){ inflater.inflate(R.menu.security, menu); menusInflated=true; } super.onCreateOptionsMenu(menu, inflater); } ``` When I again start Fragment A I want to options Menu DONE (which was set at Fragment B) for this I am doing like this ``` setHasOptionsMenu(false); MenuItem item = (MenuItem) menu.findItem(R.id.done_item); item.setVisible(false); ``` But this is not hiding at all, also it is giving NullPointerException when Activity if first started with Fragment A. Please let me know what is the problem.