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.
Réponses
Trop de publicités?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.
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()
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.
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();