Dans mes applications, j'souvent activer/désactiver les entrées de menu et de ne les rendre visibles à partir de onPrepareOptionsMenu.
Aujourd'hui, j'ai commencé à ajouter les android:showAsAction menu attribut de certains de mes Android 2.x des applications pour afficher les entrées de menu utilisée pour la plupart sur l'ActionBar.
L'ActionBar ne reflète pas l'activer/désactiver la visibilité et immédiatement. J'ai besoin de cliquer sur le menu déroulant sur la droite pour voir ce changement.
Ok, je comprends que le menu feux onPrepareOptionsMenu. Mais que dois-je faire pour actualiser l'ActionBar. Je pense que cette modification doit être appliquée à partir de l'intérieur de onOptionsItemSelected mais je ne sais pas ce que je devrais l'appeler.
Merci à l'avance.
Voici le 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" />
Voici la 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);
}
Voici la 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);
}
EDIT: Si j'ajoute invalidateOptionsMenu cela fonctionne sur Android 3.x apps mais se bloque sur Android 2.x appareils en raison d'un manque de méthode. Ce qui est de la manière souhaitée pour le faire droit.