Quoi qu'il en soit, la documentation couvre toutes les choses.
Modification des éléments de menu lors de l'exécution
Une fois l'activité créée, la
onCreateOptionsMenu()
méthode n'est appelée qu'une seule fois, comme décrit ci-dessus. Le système conserve et réutilise le que Menu
vous définissez dans cette méthode jusqu'à ce que votre activité soit détruite. Si vous souhaitez modifier le menu Options à tout moment après sa création, vous devez remplacer la onPrepareOptionsMenu()
méthode. Cela vous passe l'objet Menu tel qu'il existe actuellement. Ceci est utile si vous souhaitez supprimer, ajouter, désactiver ou activer des éléments de menu en fonction de l'état actuel de votre application.
Par exemple
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
if (isFinalized) {
menu.getItem(1).setEnabled(false);
// You can also use something like:
// menu.findItem(R.id.example_foobar).setEnabled(false);
}
return true;
}
Sur Android 3.0 et supérieur, le menu d'options est considéré comme toujours ouvert lorsque les éléments de menu sont présentés dans la barre d'actions. Lorsqu'un événement se produit et que vous souhaitez effectuer une mise à jour du menu, vous devez appeler invalidateOptionsMenu()
pour demander que le système appelle onPrepareOptionsMenu()
.
setEnable()
change ce qui se passe lorsque vous appuyez sur ce menu mais ne change pas son apparence (qu'est-ce qui ne va pas, développeurs Android?). Il est donc plus clair de désactiver et de modifier le titre, ou de préférence simplement de rendreMenuItem
invisible.false
pour désactiver complètement le menu.Sur toutes les versions d'Android, le moyen le plus simple: utilisez ceci pour AFFICHER une icône d'action de menu comme désactivée ET la rendre FONCTION aussi désactivée:
la source
Vous pouvez enregistrer l'élément en tant que variable lors de la création du menu d'options, puis modifier ses propriétés à volonté.
la source
onPrepareOptionsMenu
?simplifier la version @Vikas
la source
Comment mettre à jour le menu actuel afin d'activer ou de désactiver les éléments lorsqu'une AsyncTask est effectuée.
Dans mon cas d'utilisation, je devais désactiver mon menu pendant que mon AsyncTask chargeait des données, puis après avoir chargé toutes les données, je devais réactiver tout le menu afin de permettre à l'utilisateur de l'utiliser.
Cela a empêché l'application de permettre aux utilisateurs de cliquer sur les éléments de menu pendant le chargement des données.
Tout d'abord, je déclare une variable d'état, si la variable est 0 le menu est affiché, si cette variable est 1 le menu est masqué.
Ensuite, dans mon
onCreateOptionsMenu()
je vérifie cette variable, si c'est 1 je désactive tous mes articles, sinon, je les montre simplementDésormais, lorsque mon activité démarre, elle
onCreateOptionsMenu()
ne sera appelée qu'une seule fois et tous mes éléments auront disparu car j'ai défini leur état au début.Ensuite, je crée une AsyncTask où je mets cette variable d'état à 0 dans mon
onPostExecute()
Cette étape est très importante!
Lorsque vous appelez,
invalidateOptionsMenu();
il redémarreraonCreateOptionsMenu();
Donc, après avoir configuré mon état à 0, je viens de redessiner tout le menu mais cette fois avec ma variable sur 0, cela dit, tout le menu sera affiché une fois que tout le processus asynchrone est terminé, puis mon utilisateur peut utiliser le menu .
Résultats
la source
la meilleure solution lorsque vous effectuez sur le tiroir de navigation
la source
Une réponse plus moderne à une vieille question:
MainActivity.kt
menu_main_activity.xml
menu_item_icon_selector.xml
attrs.xml
styles.xml or themes.xml
la source
la source
Ce que j'ai fait, c'est enregistrer une référence au menu à
onCreateOptionsMenu
. Ceci est similaire à la réponse de nir sauf qu'au lieu d'enregistrer chaque élément individuel, j'ai enregistré le menu entier.Déclarez un menu
Menu toolbarMenu;
.Ensuite,
onCreateOptionsMenu
enregistrez le menu dans votre variableVous pouvez désormais accéder à votre menu et à tous ses éléments à tout moment.
toolbarMenu.getItem(0).setEnabled(false);
la source
la source
Si menu visible
Si masquer le menu
la source
Généralement, vous pouvez modifier les propriétés de vos vues lors de l'exécution:
puis...
mais
si vous souhaitez modifier la visibilité des options du ContextMenu, en appuyant sur votre bouton, vous pouvez activer un drapeau, puis dans onCreateContextMenu vous pouvez faire quelque chose comme ceci:
J'espère que ça aide
la source
onCreateContextMenu
méthode. Mais je veux accéder au menu contextuel en dehors de cette méthode.onCreateContextMenu
ne sera appelé qu'une seule fois, mais je peux cliquer sur le bouton plusieurs fois pour activer / désactiver l'élément de menu.