Was ist der wesentliche Unterschied zwischen diesen beiden Methoden? Sollte ich beim Erstellen einer Textansicht eine für die Leistung übereinander verwenden?
Bearbeiten: Was ist der Unterschied zu
onCreateView() {
root = some view
View v = new View(some context);
root.add(v);
return root;
}
onViewCreated() {
View v = new View(some context);
getView().add(v);
}
android
android-layout
android-fragments
Schmied
quelle
quelle
Antworten:
Wir haben einige Abstürze beim Initialisieren der Ansicht in
onCreateView
.Weil die Ansicht manchmal nicht richtig initialisiert wird. Verwenden Sie also immer
findViewById
inonViewCreated
(wenn die Ansicht vollständig erstellt wurde) und es wird auch die Ansicht als Parameter übergeben.onViewCreated
Stellen Sie sicher, dass die Ansicht vollständig erstellt wurde.Wird sofort nach der Rückkehr von
onCreateView
(android.view.LayoutInflater, android.view.ViewGroup
,android.os.Bundle
) aufgerufen , jedoch bevor ein gespeicherter Status in der Ansicht wiederhergestellt wurde. Dies gibt Unterklassen die Möglichkeit, sich selbst zu initialisieren, sobald sie wissen, dass ihre Ansichtshierarchie vollständig erstellt wurde. Die Ansichtshierarchie des Fragments ist jedoch zu diesem Zeitpunkt noch nicht an das übergeordnete Element angehängt.quelle
post
(...) Methode, um zu warten, bis es angezeigt wird. Wahrscheinlich wird findViewById und andere Initialisierung in machenonViewCreated
.onViewCreated
wird unmittelbar danach aufgerufenonCreateView
(die Methode, mit der Sie alle Ihre Objekte initialisieren und erstellen, einschließlich IhrerTextView
), sodass es nicht um die Leistung geht.Von der Entwicklerseite:
Quelle: Fragment # onViewCreated
quelle
Es ist besser, Unteransichten Feldern in zuzuweisen
onViewCreated
. Dies liegt daran, dass das Framework eine automatische Nullprüfung für Sie durchführt, um sicherzustellen, dass die Ansichtshierarchie Ihres Fragments ordnungsgemäß erstellt und aufgeblasen wurde (wenn eine XML-Layoutdatei verwendet wird).Code-Snippet von: FragmentManger.java
quelle
onCreateView
wird die Ansichtshierarchie des Fragments erstellt. Dies kann über XML-Inflation oder dynamische Erstellung erfolgen (dh programmgesteuertes Erstellen von Java-Ansichten). Sie können also überhaupt nicht anrufeninflate
. Sie sollten jedoch eine übergeordnete Ansicht zurückgeben, wenn das Fragment ein UI-Element haben muss. Ansonsten kehre zurücknull
.FragmentManager
und Fragment-Code fürperformCreateView
onCreateView
onViewCreated
onCreateView
Gibt die aufgeblasene Ansicht zurück.OnViewCreated
wird gleich danach aufgerufenonCreateView
und get hat Parameter die aufgeblasene Ansicht. Der Rückgabetyp istvoid
quelle
getView
Anruf vermeidenonCreateView()
ist das Fragment-ÄquivalentonCreate()
für Aktivitäten und wird während der Ansichtserstellung ausgeführt.onViewCreated()
wird ausgeführt, nachdem die Ansicht erstellt wurde.should I use one over the other for performance?
NEIN . Es gibt keine Hinweise auf eine Leistungssteigerung.Es gibt tatsächlich auch eine
onCreate()
Methode in Fragmenten, aber sie wird selten verwendet (ich verwende sie nie und finde auch keinen guten Anwendungsfall dafür).Ich benutze immer
onCreateView()
in Fragmenten als Ersatz füronCreate()
.Und damit bin ich zufrieden.
quelle
onCreateView
dies der Aktivität entsprichtonCreate
.onCreate()
in Framents eine Methode gibt. Aber es wird nie benutzt (oder zumindest benutze ich es nie ). Ich benutze immeronCreateView()
Fragmente als Ersatz.Die Dokumentation
Fragment.onCreateView()
sagt vorerst :Wir müssen nicht verstehen, warum; Wir müssen nur tun, was in den Dokumenten steht, aber es wäre interessant zu wissen, warum diese Empfehlung existiert. Meine beste Vermutung ist die Trennung von Bedenken , aber meiner Meinung nach macht es das ein bisschen komplizierter als es sein muss.
quelle
setContentView()
aufonCreate()
?Der Hauptgrund, den ich verwenden würde,
onViewCreated
ist, dass er jede Initialisierungslogik von der Inflations- / Erstellungslogik der Ansichtshierarchie trennt, die in dieonViewCreate
. Alle anderen Leistungsmerkmale sehen gleich aus.quelle
Ich denke, der Hauptunterschied zwischen diesen besteht darin, dass Sie kotlin.in onCreateView () jedes Mal verwenden, wenn Sie auf die Ansicht in Ihrer XML-Datei zugreifen möchten. Sie sollten findViewById verwenden, aber in onViewCreated können Sie einfach auf Ihre Ansicht zugreifen, indem Sie einfach die ID davon aufrufen .
quelle
onCreateView wird in Fragmenten verwendet, um ein Layout zu erstellen und die Ansicht aufzublasen. onViewCreated wird verwendet, um auf die mit der obigen Methode erstellte Ansicht zu verweisen. Schließlich empfiehlt es sich, den Aktionslistener in onActivityCreated zu definieren.
quelle