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
Post a Comment