J'ai utilisé ActivityCompat.invalidateOptionsMenu(MainActivity.this);
pour que mon élément de menu "rafraîchir" puisse être automatiquement activé/désactivé sans avoir à toucher l'option "Menu" (imaginez que l'utilisateur laisse le menu ouvert ... J'ai besoin du "Rafraîchir" "élément de menu à désactiver automatiquement et à s'activer).
La ActivityCompat.invalidateOptionsMenu(MainActivity.this)
fonctionne très bien dans Android 11+. Mais que puis-je utiliser pour Android API <11?: S J'ai cherché mais je ne trouve pas de réponse. Quelqu'un peut-il m'aider à ce sujet?
Cela fonctionne très bien dans Android API 11+, en utilisant les onPrepareOptionsMenu
et ActivityCompat.invalidateOptionsMenu(MainActivity.this)
. Le problème essaie de le faire dans Android API <11.
Voici ma méthode onPrepareOptionsMenu
:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(menuRefreshEnable){
menu.getItem(0).setEnabled(true);
}
if(!menuRefreshEnable){
menu.getItem(0).setEnabled(false);
}
return true;
}
Sur API < 11
, Utilisez la méthode supportInvalidateOptionsMenu()
ActivityCompat.invalidateOptionsMenu()
ne rappelle pas onPrepareOptionsMenu();
il suffit de mettre à jour le menu directement. Il suffit de mettre un Log.d()
et de vérifier par vous-même.
Cela fonctionne pour moi (j'utilise l'API 8):
private Menu mMenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.track_fragment, menu);
mMenu = menu;
}
...
private void someMethod() {
...
if (mMenu != null) {
MenuItem item = mMenu.findItem(R.id.new_track);
if (item != null) {
item.setVisible(false);
ActivityCompat.invalidateOptionsMenu(this.getActivity());
}
}
...
}
Ma someMethod()
est appelée depuis plusieurs endroits, même avant onCreateOptionsMenu()
, je dois donc vérifier mMenu != null
.
Cela retournera vrai si l'API est supérieure ou égale à 11 et donc prise en charge. Avant l'API 11, le menu est dessiné lorsque le bouton de menu est enfoncé, il n'y a donc pas besoin de cette méthode car elle se produit automatiquement.