61 votes

Comment puis-je modifier les actions de la barre d'action de manière dynamique ?

J'ai une activité avec une barre d'action et une navigation par onglets. J'utilise le mode fractionné, donc les onglets sont en haut et les actions sont dans la barre inférieure. Comment puis-je changer dynamiquement les actions du bas ? J'en ai besoin car chaque onglet a des actions différentes.

128voto

adamp Points 19097

Puisque les actions sont alimentées par le menu d'options de l'activité, vous pouvez utiliser Activity#invalidateOptionsMenu() . Ceci va vider le menu actuel et appeler la fonction de votre activité. onCreateOptionsMenu / onPrepareOptionsMenu méthodes pour le reconstruire.

Si vous utilisez les onglets de la barre d'action pour modifier la configuration de vos fragments, il existe une meilleure solution. Chaque fragment doit gérer sa propre partie du menu. Ces fragments devraient appeler setHasOptionsMenu(true) . Lorsque des fragments ayant des éléments de menu d'options sont ajoutés ou supprimés, le système invalidera automatiquement le menu d'options et fera appel à l'élément de menu d'options de chaque fragment. onCreateOptionsMenu / onPrepareOptionsMenu en plus de celles de l'activité. De cette façon, chaque fragment peut gérer ses propres éléments et vous n'avez pas à vous soucier d'effectuer le changement de menu à la main.

15voto

woodly Points 111

Activity.invalidateOptionsMenu() nécessite le niveau 11 de l'API. Il existe une solution plus simple qui est rétrocompatible :

Ajouter l'élément de menu au menu initialement, mais définir son visibilité à faux . Définir la visibilité sur vrai lorsque vous le souhaitez, en utilisant MenuItem.setVisible()

1voto

ActionMode.invalidate() a fait l'affaire. Cela a provoqué onPrepareActionMode() pour être invoqué à nouveau.

Activity#invalidateOptionsMenu() a fait pas causer le onPrepareActionMode() à invoquer lors de l'utilisation d'éléments de liste avec multi-sélection.

1voto

Hegazy Points 106

Activity.invalidateOptionsMenu() requiert le niveau 11 de l'API. Utilisez la version de la bibliothèque de soutien [supportInvalidateOptionsMenu()](https://developer.android.com/reference/android/support/v7/app/AppCompatActivity.html#supportInvalidateOptionsMenu()) .

AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.supportInvalidateOptionsMenu();

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