Unterschied und Verwendung von onCreate (), onCreateView () und onActivityCreated () in Fragmenten

328

Was sind die Unterschiede zwischen onCreate(), onCreateView()und onActivityCreated()in Fragmenten und wofür würden sie jeweils verwendet?

Farbod Salamat-Zadeh
quelle
@BradLarson Ich verstehe nicht, warum dies geschlossen wurde. Es hat sich als relativ beliebte Frage erwiesen und unterscheidet sich von dem in Ihrem Kommentar angegebenen Link. Diese Frage fragt nach dem Unterschied zwischen den drei verschiedenen Methoden und wie sie miteinander verglichen werden. In der Frage, die Sie in Ihrem Kommentar verlinkt haben, werden jedoch nur zwei dieser Methoden erwähnt.
Farbod Salamat-Zadeh
@BradLarson Fair genug und gut entdeckt. Könnte ich, obwohl ich Verständnis habe, keine Antwort schreiben, die die drei Methoden besser vergleicht und auf die Links verweist, um weitere Details zu erhalten?
Farbod Salamat-Zadeh
2
@ FarbodSalamat-Zadeh - Sicher. Ich habe die Frage erneut geöffnet, wenn Sie der Meinung sind, dass Sie eine bessere Antwort geben können. Ich wollte es einfach nicht unbeantwortet lassen, wenn ich könnte.
Brad Larson

Antworten:

393

onCreate ():

Das onCreate()Verfahren in a Fragmentwird nach dem gerufenen Activity‚sonAttachFragment() aber vor , dass Fragment‘ s onCreateView().
Bei dieser Methode können Sie Variablen zuweisen, IntentExtras abrufen und alles andere, was nicht die Ansichtshierarchie betrifft (dh nicht grafische Initialisierungen). Dies liegt daran, dass diese Methode aufgerufen werden kann, wenn das Activity's onCreate()noch nicht fertig ist. Daher kann der Versuch, hier auf die Ansichtshierarchie zuzugreifen, zu einem Absturz führen.

onCreateView ():

Nachdem das onCreate()(in der Fragment) aufgerufen wurde , wird das Fragment's onCreateView()aufgerufen. Sie können Ihre ViewVariablen zuweisen und beliebige grafische Initialisierungen vornehmen . Es wird erwartet, dass Sie eine Viewvon dieser Methode zurückgeben. Dies ist die Hauptansicht der Benutzeroberfläche. Wenn Sie Fragmentjedoch keine Layouts oder Grafiken verwenden, können Sie zurückkehren null(dies geschieht standardmäßig, wenn Sie nicht überschreiben).

onActivityCreated ():

Wie der Name schon sagt, wird dies aufgerufen, nachdem das Activity's onCreate()abgeschlossen ist . Es wird nach aufgerufen onCreateView()und hauptsächlich für endgültige Initialisierungen verwendet (z. B. zum Ändern von UI-Elementen).


Zusammenfassend lässt sich sagen, dass
sie alle in der, Fragmentaber zu unterschiedlichen Zeiten aufgerufen werden.
Das onCreate()wird zuerst aufgerufen, um nicht grafische Initialisierungen durchzuführen. Als Nächstes können Sie alle ViewVariablen zuweisen und deklarieren , in denen Sie sie verwenden möchten onCreateView(). Verwenden onActivityCreated()Sie anschließend, um die endgültigen Initialisierungen durchzuführen, die Sie durchführen möchten, sobald alles abgeschlossen ist.


Wenn Sie die offizielle Android-Dokumentation anzeigen möchten, finden Sie diese hier:
- - -onCreate()
onCreateView()
onActivityCreated()

Es gibt auch einige etwas andere, aber weniger entwickelte Fragen / Antworten hier auf Stack Overflow:

Farbod Salamat-Zadeh
quelle
6
Ich dachte, ich würde bei onCreate () nicht grafische Initialisierungen implementieren, damit sie beim Drehen des Bildschirms nicht erneut aufgerufen werden. Es stellt sich heraus, dass ich fragment.setRetainInstance (true) aufrufen muss, da sonst sowohl onCreate () als auch onCreateView () erneut aufgerufen werden, wenn der Bildschirm gedreht wird.
Verdammtes Gemüse
Ist der Zugriff auf die Ansichtshierarchie in onCreateView () sicher?
Cody
@Cody Ich glaube schon - der Zugriff auf die Ansichtshierarchie ist der genaue Zweck von onCreateView.
Farbod Salamat-Zadeh
1
OnCreate () der Aktivität wird jedoch möglicherweise erst beendet, wenn onActivityCreated ()? Besteht die Möglichkeit eines Absturzes in onCreateView für den Zugriff auf die Ansichtshierarchie? Ich bin nicht sicher, was der Unterschied zwischen onCreateView () / on onActivityCreated ()
Cody
1
Zu beachten ist (zumindest bei AppCompatActivity), dass beim erneuten Erstellen der Aktivität (z. B. nach dem Minimieren und Beenden) die Fragmente onCreate () aufgerufen werden, bevor die Aktivitäten onCreate () und super.onCreate () abgeschlossen sind. Dies kann ein Problem sein, wenn Sie etwas wie Dolch verwenden und auf etwas in der übergeordneten Aktivität zugreifen müssen, die injiziert wird. Eine Lösung hierfür besteht darin, den Code in onActivityCreated () einzufügen, der immer aufgerufen von onCreate () aufgerufen wird.
Nicholas
143

Für alle, die eine präzise, ​​bildliche Antwort suchen:

Geben Sie hier die Bildbeschreibung ein https://hanaskuliah.wordpress.com/2015/12/07/android-5-development-part-6-fragment/


Und,

Geben Sie hier die Bildbeschreibung ein

Schundliteratur
quelle
21
Einverstanden. Comic Sans ist für
solche
1
Es ist das erste Mal, dass ich 3 verschiedene Schriftarten im selben Diagramm sehe, und irgendwie fühlt sich mein Leben jetzt vollständig an.
Gil Sand
Wann genau könnte ein Fragment neu gestartet werden?
Saurabh
1
Wie kommt es, dass das Fragment nicht neu erstellt wird, wenn sein Prozess beendet ist? AFAIK, nur der als Bundle erhaltene Taskstatus und die neu erstellte App werden wieder in den Vordergrund gerückt.
Stdout
6

onActivityCreated () - Veraltet

onActivityCreated()ist jetzt als Fragmente Version 1.3.0-alpha02 veraltet

Die onActivityCreated () -Methode ist jetzt veraltet. Code, der die Ansicht des Fragments berührt, sollte in onViewCreated () (das unmittelbar vor onActivityCreated () aufgerufen wird) erfolgen, und anderer Initialisierungscode sollte in onCreate () enthalten sein. Um einen Rückruf speziell zu erhalten, wenn onCreate () der Aktivität abgeschlossen ist, sollte ein LifeCycleObserver im Lebenszyklus der Aktivität in onAttach () registriert und entfernt werden, sobald der onCreate () - Rückruf empfangen wurde.

Detaillierte Informationen finden Sie hier

Gastón Saillén
quelle