Reputation: 283
When using the ActionBar in Android, how do you refresh the options menu? I have tried hiding and showing the bar, along with getting a new instance of it with "getSupportActionBar()"
I am trying to implement a Login/Logout button that will change dynamically based on the state of the user.
Here is my onCreateOptionsMenu method
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (loggedIn)
menu.add(0, MENU2, 0, "Logout").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
else
menu.add(0, MENU2, 0, "Login").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(0, MENU1, 0, "Home").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return super.onCreateOptionsMenu(menu);
}
Thanks!
Upvotes: 11
Views: 9473
Reputation: 311
invalidateOptionsMenu()
requires API level 11...
for lower API use:
supportInvalidateOptionsMenu()
Upvotes: 10
Reputation: 28229
In your FragmentActivity call invalidateOptionsMenu()
This is also a public method, so if you want to refresh it from a fragment call getActivity().invalidateOptionsMenu()
BTW, if you're using SherlockActionBar you'll need to call getSherlockActivity().invalidateOptionsMenu()
from the fragment, or you'll get an exception.
Upvotes: 12
Reputation: 3890
Invalidate the menu with invalidateOptionsMenu() and then put your code in the onPrepareOptionsMenu area.
Upvotes: 15