J'ai eu un problème de configuration de certains éléments de menu de fragment dans la barre d'action code> et j'ai trouvé un moyen de le résoudre, mais je ne comprends pas pourquoi cela a fonctionné.
Je voulais changer le Visibilité dans un élément de menu juste après que je l'ai gonflé à partir d'un fichier de menu XML dans Ce que je veux savoir, c'est pourquoi changer le Visibilité dans Que puis-je faire dans Y a-t-il un modèle à suivre ici? p> merci! p> Voici le code concerné, juste au cas où: p> OncreateOptionsMenu code> méthode. Le code semble fonctionner bien, mais il n'y a pas d'effet visible. J'ai résolu le problème gonflant le menu dans
OncreateOptionsMenu Code> Mesure mais modifiant la visibilité de celui-ci dans
OnprepareOptionsMenu Code> méthode. P>
OncreateOptionsMenu Code> ne fonctionne pas. P>
OnprepareOptionsMenu Code> que je ne peux pas faire dans
OncreateOptionsMenu code>? P>
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);
}
}
4 Réponses :
Peut être le code de retour pour rendre le menu visible, cela signifie que vous devriez mettre
J'espère que cela aide. P> retourne vrai; code> instruction dans les deux
OncreateOptionsMenu () Code> et
OnprepareOptionsMenu () Code>. P>
OncreateOptionsMenu retourne non avenu
En fait, il y a deux méthodes onprepareOptions (). Premier , pour le Classe d'activité, renvoie une valeur-- si VRAI n'est pas retourné, le menu ne s'affichera pas. fragment version ne fait pas . La version de fragment nécessite l'API 11 VS API 1 pour la version d'activité. Genre d'intéressant.
J'utilise l'OnprepareOptionsMenu pour mettre à jour les éléments du menu doivent être actifs et lesquels doivent être grisés / éliminés en fonction de l'état actuel de l'activité. Utilisez la méthode SetVisible de l'élément de menu pour contrôler si elle est actuellement affichée dans le menu ou non. P>
Vous devez appeler L'activité est responsable de l'affichage et de la gestion du menu. Si vous modifiez la visibilité après avoir été envoyée à l'activité, rien ne va se passer. p>
Maintenant, lorsque vous appelez super.oncreateOptionsMenu (menu, gonfleur); code> après avoir créé votre menu, pas avant. Cela envoie le menu dans la hiérarchie et d'autres fragments ou l'activité peut vouloir ajouter des objets eux-mêmes. p>
Super.onpreparOptionsMenu (Menu); Code> Il "préparer" Son menu, mais cela prendra maintenant les modifications que vous avez apportées dans le
OncreateOptionsMenu code > en compte. P>
Nice - Supprimer cette ligne parce que vous avez raison " Je pense que i>"
Cela fonctionne pour moi essayez-le p> p>
Cette chose fonctionne pour moi, mais je veux savoir comment utiliser une méthode InvalidateOptionsMenu () pour un changement dynamique
S'il y a un code concernant la mise à jour du menu dynamique, laissez-moi savoir.
Je ne suis pas sûr, mais le Documentation dit: " ... ... Pour mettre à jour le menu chaque fois qu'il est affiché, voir OnprepareOptionsMenu (Menu) . I>"
Merci pour le commentaire! La chose ici est que je n'ai pas besoin de «la mettre à jour à chaque fois que cela est affiché» (il est affiché tout le temps, il n'y a pas de sous-obligations), je veux juste configurer le menu une seule fois, lors de la création / gonflée et c'est tout. D'accord, cela peut sembler la même chose dans ma situation, mais le point de ma question est de comprendre pourquoi cela fonctionne-t-il comme ça. Pourquoi dois-je "reconfigurer" le menu à chaque fois qu'il est affiché lorsque je ne peux le faire qu'une fois quand je le crée?
Je comprends et j'accepte que devrait être une option. Cependant, à mon avis, je pense que c'est la façon dont les œuvres Android. Dans certains cas, vous pouvez coder les propriétés du menu avec des attributs XML.
Avez-vous compris? Merci
Vous devriez accepter la réponse de Christian