À l'aide de onPrepareOptionsMenu au lieu de onCreateOptionsMenu du Fragment
J'ai eu un problème de mise en place d'un fragment d'éléments de menu dans le ActionBar
et j'ai trouvé un moyen de le résoudre, mais je ne comprends pas pourquoi cela a fonctionné.
J'ai voulu changer la visibilité dans un élément de menu juste après que j'ai gonflé à partir d'un menu fichier xml dans onCreateOptionsMenu
méthode. Le code semble fonctionner très bien, mais il n'y a pas d'effet visible. J'ai résolu le problème en gonflant le menu en onCreateOptionsMenu
méthode, mais en changeant la visibilité de celle-ci dans onPrepareOptionsMenu
méthode.
Ce que je veux savoir, c'est pourquoi la modification de la visibilité dans onCreateOptionsMenu
ne fonctionne pas.
Ce que je peux faire dans onPrepareOptionsMenu
que je ne peux pas faire dans onCreateOptionsMenu
?
Est-il un modèle à suivre ici?
Merci!
Voici le code, juste au cas où:
public class MyFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.my_menu, menu);
//This does not work, compiles and runs fine, but has no visible effect
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
//This does work
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
}
Merci pour le commentaire! La chose ici est que je n'est pas nécessaire de "mettre à jour à chaque fois qu'il est affiché" (il s'affiche tout le temps, il n'y a pas submenues), je veux juste configurer le menu, seulement une fois, lors de la création/gonflé et c'est tout. Tout droit, il peut sembler être la même chose dans ma situation, mais le but de ma question est de comprendre pourquoi ça fonctionne comme ça. Pourquoi dois-je avoir pour "reconfigurer" le menu à chaque fois qu'il s'affiche quand je peux le faire une seule fois, lorsque je le créer?
Je comprends et accepte que devrait être une option. Cependant, à mon avis, je pense que c'est la façon dont Android fonctionne. Dans certains cas, vous pouvez coder en dur le menu des propriétés avec des attributs xml.
avez-vous comprendre ? merci
vous devez accepter la réponse de christian
OriginalL'auteur Gerardo Contijoch | 2012-07-07
Vous devez vous connecter pour publier un commentaire.
Vous devriez appeler
super.onCreateOptionsMenu(menu, inflater);
après avoir créé votre menu, pas avant. Qui envoie le menu du haut dans la hiérarchie et d'autres fragments ou l'activité peut vouloir ajouter des éléments eux-mêmes.L'activité est responsable de l'affichage et la gestion de menu, donc si vous changez la visibilité après qu'il a été envoyé à l'activité, rien ne va se passer.
Maintenant, lorsque vous appelez
super.onPrepareOptionsMenu(menu);
il va "préparer" c'est au menu, mais il va maintenant prendre les modifications que vous avez apportées dans leonCreateOptionsMenu
en compte.Fait - merci pour comfirming.
OriginalL'auteur Christian
Peut être le code doit retourner true pour faire le menu visible, cela signifie que vous devez mettre
return true;
déclaration dans les deuxonCreateOptionsMenu()
etonPrepareOptionsMenu()
.Espère que cette aide.
En fait, il y a DEUX onPrepareOptions() méthodes. La premier, pour l'Activité de la classe, renvoie une valeur si vrai, n'est pas retourné, le menu ne vais pas vous montrer. La Fragment version ne fonctionne pas. Le Fragment de la version requiert l'API 11 vs API 1 pour l'Activité de la version. Plutôt intéressant.
OriginalL'auteur r3d
- Je utiliser le onPrepareOptionsMenu de mettre à jour les éléments sur le menu doit être active et ceux qui devraient être désactivés ou supprimés en fonction de l'état actuel de l'activité. Utiliser la méthode setVisible de l'élément de menu pour contrôler s'il est indiqué sur le menu ou pas.
OriginalL'auteur Howard
Cela fonctionne pour moi
Essayer
si il y a aucun code en matière de dynamique de menu mise à jour alors svp laissez-moi savoir.
OriginalL'auteur Dipti Agravat