Android invalidateOptionsMenu () pour API <11

J’ai utilisé ActivityCompat.invalidateOptionsMenu(MainActivity.this); pour que mon élément de menu “refresh” puisse être automatiquement activé / désactivé sans avoir à utiliser, appuyer sur l’option “Menu” (imaginez que l’utilisateur laisse le menu ouvert … J’ai besoin que l’élément de menu “Actualiser” soit automatiquement désactivé et s’autorise) ).

Le ActivityCompat.invalidateOptionsMenu(MainActivity.this) fonctionne ActivityCompat.invalidateOptionsMenu(MainActivity.this) avec Android 11+. Mais que puis-je utiliser pour l’API Android <11? : S J'ai tellement cherché mais je ne trouve pas de réponse. Quelqu'un peut-il m'aider s'il vous plaît à ce sujet?

Cela fonctionne bien dans Android API 11+, en utilisant le 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 onPrepareOptionsMenu(); pas onPrepareOptionsMenu(); il suffit de mettre à jour le menu directement. Il suffit de mettre du 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() , donc je dois vérifier mMenu != null .

Cela retournera true si l’API est supérieure ou égale à 11 et donc prise en charge. Avant l’API 11, le menu s’affiche lorsque le bouton de menu est enfoncé. Cette méthode n’est donc pas nécessaire car elle se produit automatiquement.