web-dev-qa-db-fra.com

Android invalidateOptionsMenu () pour API <11

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;
}
76
SnitramSD

Sur API < 11, Utilisez la méthode supportInvalidateOptionsMenu()

232
Alexander Zhak

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.

5
user2461595

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.

0
AndroidPenguin