76 votes

Android invalidateOptionsMenu () pour API <11

J'ai utilisé ActivityCompat.invalidateOptionsMenu(MainActivity.this); , de sorte que mon point de menu "actualiser" peut être automatiquement activé/désactivé sans l'aide de touche "Menu" option (imaginez l'utilisateur quitte le Menu ouvrir... j'ai besoin de la "Actualiser" dans le menu automatiquement désactivé et permettre à lui-même).

L' ActivityCompat.invalidateOptionsMenu(MainActivity.this) fonctionne très bien sur Android 11+. Mais ce que je peux utiliser pour android API < 11 ? :S j'ai cherché beaucoup, mais je ne trouve pas de réponse. Quelqu'un peut-il m'aider sur ce point?

Cela fonctionne bien dans l'API Android 11+, à l'aide de l' onPrepareOptionsMenu et ActivityCompat.invalidateOptionsMenu(MainActivity.this). La question est d'essayer de le faire dans l'API Android < 11.

Voici mon onPrepareOptionsMenu méthode:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(menuRefreshEnable){
        menu.getItem(0).setEnabled(true);
    }
    if(!menuRefreshEnable){
        menu.getItem(0).setEnabled(false);
    }       
    return true;
}

232voto

Alexander Zhak Points 2818

Sur API < 11 utilisation supportInvalidateOptionsMenu() méthode

5voto

Look Alterno Points 133

ActivityCompat.invalidateOptionsMenu() ne rappelle pas onPrepareOptionsMenu(); il suffit de mettre à jour le menu directement. Il suffit de mettre quelques Log.d() et de vérifier par vous-même.

Cela fonctionne pour moi (j'utilise 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());
        }
    }
...
}
 

Mon someMethod() est appelé depuis plusieurs endroits, même avant onCreateOptionsMenu() , je dois donc vérifier mMenu != null .

0voto

AndroidPenguin Points 2495

Cela retournera true 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é. Cette méthode n'est donc pas nécessaire car elle est automatique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X