Ich habe ein paar Haltepunkte eingefügt onCreate
(einen am Anfang und einen am Ende der Methode) und einen am Anfang von onCreateOptionsMenu
. Die onCreate
Methode wird zuerst aufgerufen und vor dem Abschluss onCreateOptionsMenu
aufgerufen.
Ich versuche, den Fragment
Navigationscode in meiner App zu trennen , daher habe ich einige Objekte, an die ich delegieren kann onCreateOptionsMenu
, je nachdem, ob die App auf einem Telefon / Tablet ausgeführt wird (ich verwende die Bildschirmgröße, um dies zu bestimmen, meine Layoutdatei für Bei großen Bildschirmen wird eine Ansicht angezeigt, nach der ich nach dem Aufblasen des Layouts suche. Das Problem, das ich habe, ist, dass ich diese Objekte in onCreate erstelle und eine Nullzeigerausnahme erhalte, wenn ich auf das Objekt in verweise onCreateOptionsMenu
.
quelle
NPE
als ich überprüfte, ob dasnav drawer fragment
offen waronCreateOptionsMenu
. Ich musste sowohl im onCreateOptionsMenu der Aktivität als auch im Rückruf, den das Fragment in seinem onCreateOptionsMenu verwendete, Nullprüfungen durchführen. Wirklich komisch, weil es nur auf ein paar Bildschirmen passierte, aber konsequent auf diesen.In meinem Fall unter Android 2.3 und mit
FragmentActivity
der v4-Support-Bibliothek ist die Reihenfolge der aufgerufenen Lebenszyklusmethoden wie folgt:quelle
Ich habe festgestellt, ob ich in onResume () anrufe
Anschließend wird onCreateOptionsMenu (Menü Menü) aufgerufen - gemäß dem Aktivitätslebenszyklus (ich denke, das ist hier der richtige Begriff) , wie durch @ tir38 angegeben
quelle
supportInvalidateOptionsMenu();
invalidateOptionsMenu
einen Job zum (erneuten) Erstellen des Optionsmenüs erstellen, wird er der Nachrichtenwarteschlange der Benutzeroberfläche hinzugefügt. Was sich sonst noch in der Warteschlange befindet, wird zuerst ausgeführt.Ergänzung in der obigen Antwort: Bei ICS und Honeycomb wird onCreateOptionsMenu nach onCreate und onPostCreate aufgerufen, während es in Gingerbread und früheren Versionen nach onCreate, aber vor onPostCreate aufgerufen wird. Das ist der einzige Unterschied, den ich gefunden habe.
quelle
Nach meiner Erfahrung
ActionBarActivity
aus Support v7 wird dieonCreateOptionsMenu()
aufgerufenesetContentView()
Methode in der MitteonCreate()
auf 4.1.1 angezeigt.Aber auf 4.4
onCreateOptionMenu()
rief eine andere Geschichte nachonCreate()
. Ich weiß auch nicht, dass es unmittelbar danach sein kann, vielleicht auch nicht. Ist aber Tatsache nach. Ich habe nicht auf anderen Versionen getestet, aber 4.1.1 war zuerst, wo ich Probleme mit der Init-Reihenfolge hatte.quelle
supportInvalidateOptionsMenu()
?Ich schlage vor, eine Rückruffunktion in Ihrem Fragment zu erstellen, um Zeitprobleme mit onResume () und onCreateOptionsMenu () zu vermeiden.
Folgendes zu tun funktioniert für mich einwandfrei:
Beispiel:
quelle