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.