J'ai mis quelques points d'arrêt onCreate
(un au début et un à la fin de la méthode), et j'en ai également mis un au début de onCreateOptionsMenu
. La onCreate
méthode est appelée en premier et avant qu'elle ne se termine onCreateOptionsMenu
.
J'essaie de séparer le Fragment
code de navigation dans mon application, j'ai donc quelques objets auxquels je délègue onCreateOptionsMenu
en fonction de si l'application s'exécute sur un téléphone / une tablette (j'utilise la taille de l'écran pour déterminer cela, mon fichier de mise en page pour les grands écrans ont une vue que je vérifie une fois la mise en page gonflée). Le problème que je rencontre est que je crée ces objets dans onCreate et que je reçois une exception de pointeur nul lorsque je référence l'objet dans onCreateOptionsMenu
.
la source
NPE
en vérifiant si lenav drawer fragment
était ouvertonCreateOptionsMenu
. J'ai dû mettre des vérifications nulles dans le onCreateOptionsMenu de l'activité, ainsi que dans le rappel que le fragment utilisait dans son onCreateOptionsMenu. Vraiment bizarre parce que cela ne se produisait que sur quelques écrans, mais systématiquement sur ceux-ci.Dans mon cas sur Android 2.3 et avec la
FragmentActivity
bibliothèque de support v4, l'ordre des méthodes de cycle de vie invoquées est le suivant:la source
J'ai trouvé si dans onResume () j'appelle
puis onCreateOptionsMenu (menu menu) est appelé par la suite - selon le cycle de vie de l' activité (je pense que c'est le terme correct ici) , comme indiqué par @ tir38
la source
supportInvalidateOptionsMenu();
invalidateOptionsMenu
, un travail pour (re) créer le menu d'options sera ajouté à la file d'attente des messages de l'interface utilisateur. Tout ce qui est dans la file d'attente sera exécuté en premier.Ajout dans la réponse ci-dessus, Dans le cas d'ICS et Honeycomb onCreateOptionsMenu est appelé après onCreate et onPostCreate alors que dans Gingerbread et les versions antérieures, il est appelé après onCreate mais avant onPostCreate. C'est la seule différence que j'ai trouvée.
la source
D'après mon expérience
ActionBarActivity
du support v7, la méthodeonCreateOptionsMenu()
appelée ausetContentView()
milieuonCreate()
apparaît sur 4.1.1.Mais sur 4.4, une autre histoire est
onCreateOptionMenu()
appelée aprèsonCreate()
. Aussi, je ne sais pas que ce sera peut-être immédiatement après, peut-être pas. Mais c'est fait après. Je n'ai pas testé sur d'autres versions mais la 4.1.1 est la première où j'ai eu un problème avec l'ordre d'initialisation.la source
supportInvalidateOptionsMenu()
?Je suggère de créer une fonction de rappel dans votre fragment pour éviter les problèmes de synchronisation avec onResume () et onCreateOptionsMenu ().
faire les travaux suivants sans faute pour moi:
exemple:
la source