Warum wird mein Fragment onCreate immer dann ausführlich aufgerufen, wenn ich in meinem AnwendungsviewPager blättere?

Ich verstehe dieses Fragment-Lifecycle-Geschäft nicht ganz.

Ich habe ein ziemlich standardmäßiges 3-seitiges horizontales Pager-Layout für einen Abschnitt "Details anzeigen" meiner App. Ich starte meine App auf der mittleren Seite der drei. Meine Fragmentaktivität legt die Seite auf Seite 1 fest.

mPager.setCurrentItem(1); //default to center page, current data view fragment

Ich habe den FragmentStatePagerAdapter verwendet, weil der FragmentPagerAdapter meine App manchmal abstürzte, wenn ich zum Beispiel aus einem angehaltenen Zustand zurückkam, und dies war der schnellste Weg, um das jetzt zu umgehen. Scheint zu funktionieren, aber ich vermute, dass der staatliche Aspekt möglicherweise die Ursache für mein Problem ist.

Zuerst dachte ich, dass ich jedes Fragment dazu bringen würde, Daten von einem Rest-Service abzurufen und sie dann in einer Liste anzuzeigen, aber ich bin mir nicht mehr so ​​sicher.

Ich habe versucht, eine eindeutige asynchrone Aufgabe auszuführen, um Daten in jedem der Fragmente von CreateView-Ereignissen abzurufen. Nachdem ich mehr über den Fragment-Lebenszyklus gelesen hatte, wechselte ich zu onCreate, nachdem ich bemerkt hatte, dass onCreateView ziemlich stark aufgerufen wurde, was wiederum zu einer gierigen App führte, die zu oft Daten über das Netzwerk anforderte.

Der Wechsel zu onCreate hat nichts geändert. OnCreate wird immer noch genauso oft aufgerufen wie onCreateView für die beiden benachbarten Fragmente.

Das Seltsame ist, dass das Fragment, das ich als erstes in der Fragmentaktivität angezeigt habe, nur einmal den onCreate-Aufruf erhält.

Hier fühlt sich etwas nicht richtig an.

Im Moment denke ich, dass ich die übergeordnete Fragmentaktivität deklarieren und alle asynchronen Tasks aufrufen lassen sollte, um die Daten abzurufen, die ich in den Fragmenten anzeigen muss. Legen Sie die Ergebnisse der asynchronen Aufrufe in einem Objekt fest, dessen Eigentümer die übergeordnete Fragmentaktivität ist, und lassen Sie die Fragmente das im übergeordneten Objekt enthaltene Objekt verwenden, um die Listenansicht usw. zu erstellen.

Aber was ist, wenn die von der übergeordneten Aktivität gestarteten asynchronen Aufgaben nicht abgeschlossen sind, bevor alle Fragmente von onCreateView aufgerufen wurden und das von der übergeordneten Komponente enthaltene Objekt noch nicht bereit ist?

signiert, verwirrt und frustriert

Antworten auf die Frage(2)

Ihre Antwort auf die Frage