Como atualizar a ActionBar quando onPrepareOptionsMenu mudou as entradas do menu?

Nos meus aplicativos, costumo ativar / desativar as entradas do menu e torná-las visíveis no onPrepareOptionsMen

oje, comecei a adicionar o atributo de menu android: showAsAction a alguns dos meus aplicativos Android 2.x para mostrar as entradas de menu mais usadas na ActionBa

A ActionBar não reflete a ativação / desativação e a visibilidade imediatamente. Preciso clicar no menu suspenso à direita para ver essa alteração acontecer.

Ok, eu entendo que o menu é acionado no menu PrepareOptions. Mas o que preciso fazer para atualizar o ActionBar? Acho que essa alteração precisa ser aplicada de dentro de onOptionsItemSelected, mas não sei como devo chamar.

Aqui está o 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" />

Aqui está o menu onPrepareOptions:

@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);
}

Aqui está o 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 Se eu adicionar invalidateOptionsMenu, isso funcionará nos aplicativos Android 3.x, mas trava nos dispositivos Android 2.x devido a um método ausente. Qual é a maneira recomendada de fazer isso corretamente?

questionAnswers(10)

yourAnswerToTheQuestion