¿Cómo puedo actualizar la barra de acciones cuando onPrepareOptionsMenu cambió las entradas del menú?

entro de mis aplicaciones, a menudo habilito / deshabilito las entradas del menú y las hago visibles desde onPrepareOptionsMenu.

Hoy comencé a agregar el atributo de menú android: showAsAction a algunas de mis aplicaciones Android 2.x para mostrar las entradas de menú más utilizadas en ActionBar.

The ActionBar no refleja la habilitación / deshabilitación y la visibilidad de inmediato. Necesito hacer clic en el menú desplegable a la derecha para ver cómo ocurre este cambio.

Ok, entiendo que el menú se activa enPrepareOptionsMenu. Pero, ¿qué debo hacer para actualizar la Barra de acciones? Creo que este cambio debe aplicarse desde onOptionsItemSelected, pero no sé a qué debo llamar.

Aquí está el menú

<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" />

Aquí está el 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);
}

Aquí está el 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);
}

EDITAR Si agrego invalidateOptionsMenu, esto funciona en aplicaciones Android 3.x pero falla en dispositivos Android 2.x debido a la falta de un método. ¿Cuál es la forma recomendada de hacerlo bien?

Respuestas a la pregunta(10)

Su respuesta a la pregunta