Android Fragment onCreateView vs. onActivityCreated

73

Ich weiß, dass die Ansichtshierarchie eines Fragments in onCreateView aufgeblasen werden muss, aber welche anderen Funktionen können in onCreateView enthalten sein, und was sollte auf onActivityCreated warten? Meine aktuelle Implementierung verwendet für alles separate Aktivitäten, und eine typische Aktivität erledigt den größten Teil ihrer Arbeit in ihrer onCreate-Methode, einschließlich Aufblasen der Ansicht, Festlegen der Inhaltsansicht, Initialisieren der verschiedenen Widgets mit Daten, Einrichten von Listenern usw.

Kann dies wahrscheinlich alles in onCreateView verschoben werden, oder sollten stattdessen einige Funktionen in eine onActivityCreated-Methode eingefügt werden?

gordonwd
quelle

Antworten:

77

Wenn Ihre Ansicht statisch ist, ist es nicht erforderlich, Code in die onActivityCreated-Methode zu verschieben. Wenn Sie beispielsweise einige Listen aus dem Adapter ausfüllen, sollten Sie dies in der onActivityCreated-Methode tun und den Ansichtsstatus wiederherstellen, wenn setRetainInstance dies verwendet hat.

Der Zugriff auf die Ansichtshierarchie der übergeordneten Aktivität muss nicht früher in onActivityCreated erfolgen.

Vitakot
quelle
Warum ist es bei "statisch" nicht erforderlich? Es scheint, dass jeder das hat, aber ich habe es nicht getan.
Diffy
6
Glaube nicht, dass alle es verstanden haben, Diffy, aber sie waren einfach zufrieden mit der Antwort :)
Boy
7
@Diffy meinte er mit statischer Ansicht, dass die Ansicht, die dem Benutzer angezeigt wird, nichts anderes als das aufgeblasene XML-Layout ist. Keine Änderung in der Codierung oder zur Laufzeit.
Hamzeh Soboh
2
@vitakot Können Sie die Liste aus dem Anwendungsfall des Adapters etwas näher erläutern? Warum können Sie onCreateView nicht einfügen?
Lujop
1
Gute Antwort, aber es ist hilfreicher, wenn Sie @vitakot erklären können, warum wir die onActivityCreated-Methode verwenden müssen, wenn Sie Daten aus Adaptern in die Listenansicht / Reyclerview eingeben.
user3189761
0

onActivityCreated()ist in Fragment 1.3.0-alpha02 veraltet und es wird empfohlen, onViewCreated()stattdessen zu verwenden . Hier wurde bereits eine Ansicht erstellt, und Sie können Listener festlegen, LiveData von ViewModel aus beobachten, recyclerView initialisieren usw.

Zum besseren Verständnis können Sie sich meinen Blog-Beitrag ansehen, in dem ich den Lebenszyklus von Android-Fragmenten in 137 Sekunden beschreibe.

vladsonkin.com
quelle