В своих приложениях я часто включаю / отключаю пункты меню и делаю их видимыми из onPrepareOptionsMenu.
Сегодня я начал добавлять атрибут меню android: showAsAction в некоторые из моих приложений Android 2.x для отображения менюзаписи, наиболее часто используемые на панели действий.
Панель действий не отражает включение / отключение и видимость сразу.Мне нужно щелкнуть раскрывающееся меню справа, чтобы увидеть, как это изменение произошло.
Хорошо, я понимаю, что меню запускается по RepareOptionsMenu.Но что мне нужно сделать, чтобы обновить ActionBar?Я думаю, что это изменение должно быть применено изнутри onOptionsItemSelected, но я не знаю, что мне следует вызывать.
Вот меню:
<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" />
Вот 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);
}
Вот 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(); // This works on Android 3.x devices only
return true;
case R.id.men_satelliteview:
mapView.setSatellite(true);
mapView.setStreetView(false);
mapView.invalidate();
invalidateOptionsMenu(); // This works on Android 3.x devices only
return true;
}
return super.onOptionsItemSelected(menuItem);
}
РЕДАКТИРОВАТЬ: Если я добавлю invalidateOptionsMenu, это работает в приложениях Android 3.x, но происходит сбой на устройствах Android 2.x из-за отсутствующего метода.Какой рекомендуемый способ сделать это правильно?