Ich habe ein neues Projekt mit der Template-Implementierung des Navigations-Schubladenfragments und einer MainActivity eingerichtet.
Es liefert mir die folgenden relevanten Methoden:
%Vor%Meine MainActivity wird durch eine Splash-Aktivität gestartet, die ein gespeichertes Zugriffstoken über EXTRA_TOKEN erhält.
Dies ist die Überschreibung des Listenelements für die Navigationsschublade in MainActivity:
%Vor% Es startet drei verschiedene Fragmente, je nachdem welches Element im NavDrawer ausgewählt ist. Während die neuen Fragmente instanziiert werden, wird die Zeichenfolge token
in ihren Konstruktor übergeben, der zur weiteren Verwendung in der Klasse des Fragments gespeichert wird.
Beim ersten Start der App scheint jedoch onNavigationDrawerItemSelected
vor onCreate
! Dies führt dazu, dass ich ein Nullwert-Token in die Fragmente übergebe, was dazu führt, dass sie alle durcheinander sind.
Wie ist das möglich? Wie ich es verstehe, sollte das NavigationDrawerFragment noch nicht eingerichtet worden sein!
Ich setze Haltepunkte sowohl für onCreate
als auch für onNavigationDrawerItemSelected switch position = 0
. onNavigationDrawerItemSelected
wird tatsächlich vor onCreate
getroffen.
Wie kann ich sicherstellen, dass das Token zuerst abgerufen wird, bevor versucht wird, das onNavigationDrawerItemSelected
zu behandeln?
Jede Hilfe wäre willkommen.
Ich glaube, ich habe es herausgefunden, wie es mir passierte, für jeden, der das durchsucht und keine Antwort findet.
Wenn Sie Android Studio DrawerActivity verwenden, gibt es einen Standardcode, den sie für Sie erstellen. In diesem Code in der activity_main.xml oder dem XML-Code, den DrawerActivity als Inhaltsansicht festlegt, gibt es ein Tag.
Wenn setContentView () in onCreate () aufgerufen wird, wird dieses Fragment automatisch erstellt und technisch wird onCreate () immer noch zuerst aufgerufen, aber dann wird die Methode onNavigationDrawerItemSelected () vor allem anderen in create aufgerufen. Da setContentView normalerweise oben gehalten wird, verursacht dies Probleme beim Speichern des Zustands der Fragmente in Ihrer Schublade.
Bewegen Sie einfach jeden Code, der nach savedInstanceBundle sucht, über setContentView () und das Problem wird behoben.
Beispiel mit Kommentaren:
%Vor%Ich stimme auch der Verwendung eines Boolean zu, um zu überprüfen, ob onCreate () fertig geladen ist. Mein einziger anderer Vorschlag ist, dass Sie für eine schnelle Lösung onSectionAttached (int-Nummer) verwenden können, um jedes ausgewählte Element zu verarbeiten anstatt onNavigationDrawerItemSelected.
Tags und Links java android android-intent android-fragments navigation-drawer