Warum ist mein fragment onCreate aufgerufen wird ausgiebig immer wenn ich die Seite durch meine Anwendungen viewPager?
Ich bin nicht ganz verstehen, dieses fragment-Lebenszyklus business.
Ich habe eine ziemlich standard-3 Seite horizontal-slider-Ansicht-Pager-layout für ein "details" - Bereich meiner app. Ich starte meine app auf der mittleren Seite der drei. Meine FragmentActivity setzt die Seite auf Seite 1.
mPager.setCurrentItem(1); //default to center page, current data view fragment
Habe ich mit der FragmentStatePagerAdapter da die Verwendung der FragmentPagerAdapter stürzte die app mal an, wenn Sie kommen zurück aus dem angehaltenen Zustand zum Beispiel, und dies war der Schnellste Weg, um zu umgehen, dass für jetzt. Scheint zu funktionieren, aber ich vermute, der Staat Aspekt ist, was möglicherweise die Ursache für mein problem hier, vielleicht.
Also zuerst dachte ich, ich hätte jedes fragment die Arbeit der abrufen von Daten aus einem rest-Dienst und dann zeigt Sie in einer Liste, aber ich bin mir nicht so sicher mehr.
Ich habe versucht mit einem einzigartigen async task zum abrufen von Daten in jedem der Fragmente onCreateView Veranstaltungen.
Dann nach dem Lesen mehr auf die fragment-Lebenszyklus wechselte ich in die onCreate, bemerkt, dass die onCreateView aufgerufen wurde ziemlich stark, was wiederum für einen gierigen app, die zu Häufig angeforderten Daten über den Draht.
Wechsel zu onCreate hat nichts verändert. OnCreate ist noch geting genannt, nur so viel, wie onCreateView für die 2 angrenzenden Fragmente.
Das seltsame ist, dass das fragment, dass ich zu den ersten, die Anzeige im Fragment-Aktivität wird nur das onCreate aufgerufen, das eine mal.
Etwas fühlt sich nicht richtig an hier.
Recht jetzt denke ich, ich sollte die parent-fragment-Aktivität erklären und rufen die ganze async tasks zum abrufen der Daten, die ich brauche, um die Anzeige in die Fragmente.
Die Ergebnisse der asynchronen Aufrufe wird ein Objekt, das im Besitz der Muttergesellschaft fragment-Aktivität und dann haben die Fragmente verwenden, die das Objekt enthalten, die von den Eltern auf die Liste erstellen, anzeigen etc.
Aber was ist, wenn der asynchrone Aufgaben begonnen, die von der übergeordneten Aktivität nicht beenden, bevor die einzelnen Fragmente onCreateView aufgerufen wird und das Objekt, die durch den Elternteil ist nicht bereit noch.....
unterzeichnet, verwirrt und frustriert
Du musst angemeldet sein, um einen Kommentar abzugeben.
ViewPager ist ganz eifrig Herunterfahren Dinge, die Sie momentan nicht verwenden, und das ist genau das, was hier geschieht. Das default-Verhalten ist für ViewPager zu "halten", um eine Seite jeder Seite von der Seite angesehen, und zerstören den rest. Damit in Ihrem 3-Seiten-Ansicht, Seite 3 zerstört wird bei der Auswahl von Seite 1, dann Seite 2 ist reselected Seite 3 ist neu. Wie Sie bemerkt haben, Seite 2 hat nur
onCreate(..)
einmal aufgerufen, weil es immer neben, oder ist die derzeit ausgewählte Seite.Um dieses Problem zu lösen, legen Sie einfach
ViewPager.setOffscreenPageLimit(2)
. Dann der ViewPager wird alle Ihre Fragmente. Natürlich ist dies nicht eine gute Idee für eine große Anzahl von Fragmenten, aber für deinen Fall sollte es in Ordnung sein.@Espiandev die Lösung für Ihren aktuellen Fall, aber du hast Recht, dass Ihr Staat ist das Problem. Sollten Sie die
setArgument
- und/oderonSaveInstanceState
Methoden zum speichern IhrerFragment
's Staat (das sollte nicht allzu schwer sein, da zB, eine Antwort vom server kann in der Regel als Zeichenfolge dargestellt), und verwenden Sie danngetArgument
und/oder dieBundle
übergebenonCreate
um es wiederherzustellen.Alternativ könnten Sie die
Activity
tun, der server holt, und dann rufen SiesetArgument
für jedes Ihrer Fragmente, und überprüfen Sie die Argumente in IhremFragment
zu bestimmen, ob Ihre Daten da noch (und wenn nicht, potenziell Anzeige ein laden der Staat von einer Art).Wenn Sie sich sorgen über den Bildschirm, Orientierung ändern, in diesem Zusammenhang Frage wird auch für Sie nützlich sein.