android - How can I refresh the ActionBar when onPrepareOptionsMenu switched menu entries? -


within apps enable/disable menu entries , make them visible onprepareoptionsmenu.

today started add android:showasaction menu attribute of android 2.x apps show menu entries used on actionbar.

the actionbar not reflect enable/disable , visibility immediately. need click on menu dropdown on right see change happen.

ok, understand menu fires onprepareoptionsmenu. need refresh actionbar? think change needs applied within onoptionsitemselected don't know should call.

here's menu:

<item     android:icon="@drawable/ic_menu_mapmode"     android:id="@+id/men_mapview"     android:showasaction="ifroom|withtext"     android:title="@string/txt_mapview" />  <item     android:icon="@drawable/ic_menu_mapmode"     android:id="@+id/men_satelliteview"     android:showasaction="ifroom|withtext"     android:title="@string/txt_satelliteview" /> 

here's onprepareoptionsmenu:

@override public boolean onprepareoptionsmenu(final menu menu) {     menuitem menuitemmapview = menu.finditem(r.id.men_mapview);     menuitem menuitemsatelliteview = menu.finditem(r.id.men_satelliteview);      if (mapview.issatellite()) {         menuitemmapview.setenabled(true).setvisible(true);         menuitemmenuitemsatelliteview.setenabled(false).setvisible(false);     } else {         menuitemmapview.setenabled(false).setvisible(false);         menuitemmenuitemsatelliteview.setenabled(true).setvisible(true);     }      return super.onprepareoptionsmenu(menu); } 

here's onoptionsitemselected

@override public boolean onoptionsitemselected(final menuitem menuitem) {     switch (menuitem.getitemid()) {         case r.id.men_mapview:             mapview.setsatellite(false);             mapview.setstreetview(true);             mapview.invalidate();              invalidateoptionsmenu(); // works on android 3.x devices             return true;         case r.id.men_satelliteview:             mapview.setsatellite(true);             mapview.setstreetview(false);             mapview.invalidate();              invalidateoptionsmenu(); // works on android 3.x devices             return true;     }      return super.onoptionsitemselected(menuitem); } 

edit: if add invalidateoptionsmenu works on android 3.x apps crashes on android 2.x devices because of missing method. what's recommended way right?

my method of choice create helper class. example:

class versionhelper {     static void refreshactionbarmenu(activity activity)     {         activity.invalidateoptionsmenu();     } } 

now in code above, replace invalidateoptionsmenu(); with:

if (build.version.sdk_int >= 11) {     versionhelper.refreshactionbarmenu(this); } 

credit method goes commonsware (search honeycombhelper, , check out books - highly recommended)


Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -