Within my apps I often enable/disable menu entries and do make them visible from onPrepareOptionsMenu.
Today I started to add the android:showAsAction menu attribute
Also make sure you are not calling
myAppCompatActivity.setToolbarTitle("some dynamic title");
shortly after you have refreshed your menu.
I had the issue that the drawables would not show up even if there was room for them to be displayed. Once I did an orientation change the drawables then appeared.. ?
In Summary:
MainActivity:
public class MainActivity extends AppCompatActivity {
private boolean showMenu = true;
public void setShowMenu(boolean show) {
showMenu = show;
supportInvalidateOptionsMenu();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_menu, menu);
menu.findItem(R.id.menu_share).setVisible(showMenu);
// menu.findItem(...
return true;
}
}
FragmentNoMenu:
public abstract class FragmentNoMenu extends Fragment {
protected MainActivity mainActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
mainActivity = (MainActivity) getActivity();
if (mainActivity != null) {
mainActivity.setShowMenu(false);
}
}
}
FragmentWithMenu:
public abstract class FragmentWithMenu extends Fragment {
protected MainActivity mainActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
mainActivity = (MainActivity) getActivity();
if (mainActivity != null) {
mainActivity.setShowMenu(true);
}
}
}