J'ai une activité qui a 2 fragments. Les deux sont des ListFragments et contribuent tous les deux MenuItems au Menu. J'ai un MenuItem pour lequel j'ai défini l'attribut android: showAsAction pour qu'il s'affiche sous forme de bouton sur l'ActionBar. Ce qui fonctionne bien.
Désormais, le MenuItem dépend de l'état. C'est une option de menu Pause / Reprise pour mettre en pause et reprendre une file d'attente. Mon problème est que je ne peux pas comprendre comment définir sa statue initiale lorsque le fragment est créé.
Son état dépend du fait que la file d'attente soit mise en pause ou non. J'ai donc une AsyncTask qui récupère la file d'attente et définit un booléen (mis en pause) en fonction de l'état de la file d'attente. J'appelle onPrepareOptionsMenu pour définir le texte de l'élément de menu Pause en fonction du dernier état connu de la file d'attente et cela fonctionne très bien si je laisse le MenuItem dans le menu réel. Vous appuyez sur l'icône de menu et onPrepareOptionsMenu est déclenché et le menu est mis à jour avant d'être affiché.
Le problème est que si je mets ce même MenuItem sur l'ActionBar (showAsAction), comment puis-je le forcer à se mettre à jour sans avoir à appeler onPrepareOptionsMenu? Je dois pouvoir le faire car au premier lancement de l'application, j'envoie une demande pour obtenir la file d'attente, mais la tâche revient après la configuration et l'affichage de l'ActionBar. J'ai créé un gestionnaire dans mon fragment qui est appelé chaque fois que je reçois une mise à jour de file d'attente, mais à partir de là, comment puis-je mettre à jour le texte de mon MenuItem sur l'ActionBar? Je n'arrive pas à trouver un moyen d'obtenir le menu actuellement défini pour le manipuler, sauf dans onPrepareOptionMenu.
Rob W.
supportInvalidateOptionsMenu()
placesupportInvalidateOptionsMenu()
est désormais obsolète; vous pouvez utiliser en toute sécuritéinvalidateOptionsMenu()
.dans mon cas: il
invalidateOptionsMenu
suffit de reconfigurer le texte sur l'original, mais accéder directement à l'élément de menu et réécrire le texte souhaité a fonctionné sans problème:grâce au commentaire ci-dessous, j'ai pu accéder à l'élément de menu via le code suivant:
la source
mnuTopMenuActionBar_
?mnuTopMenuActionBar_
non initialisé, non? Comment contourneriez-vous cela?Pour actualiser le menu à partir de Fragment, appelez simplement:
la source
J'ai utilisé ce code:
Et a fonctionné comme un charme pour moi, vous pouvez trouver OnPrepareOptionsMenu ici
la source
Veuillez d'abord suivre les deux lignes de codes pour mettre à jour les éléments de la barre d'action avant de définir une condition dans oncreateOptionMenu (). Par exemple:
la source
Pour plus de clarté, j'ai pensé qu'un exemple direct de saisie sur une ressource peut être montré à partir de ce qui suit qui, je pense, contribue à la réponse à cette question avec un exemple direct rapide.
Dans ce cas, vous maintenez une référence MenuItem au début, puis changez son état (pour les changements d'état d'icône par exemple) à un moment donné plus tard.
la source
Dans Kotlin 1.2, appelez simplement:
et la
onCreateOptionsMenu
fonction sera à nouveau appelée.la source