Jaka jest zasadnicza różnica między tymi dwiema metodami? Kiedy tworzę TextView, czy powinienem używać jednego nad drugim w celu zwiększenia wydajności?
Edycja: jaka jest różnica między
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);
}
Odpowiedzi:
Mamy do czynienia z awariami podczas inicjowania widoku w programie
onCreateView
.Ponieważ czasami widok nie jest poprawnie zainicjowany. Dlatego zawsze używaj
findViewById
inonViewCreated
(gdy widok jest w pełni utworzony), a także przekazuje widok jako parametr.onViewCreated
to upewnienie się, że widok jest w pełni stworzony.Wywoływana natychmiast po zwróceniu
onCreateView
(android.view.LayoutInflater, android.view.ViewGroup
,android.os.Bundle
), ale przed przywróceniem do widoku jakiegokolwiek zapisanego stanu. Daje to podklasom szansę na zainicjowanie się, gdy dowiedzą się, że ich hierarchia widoków została całkowicie utworzona. Hierarchia widoków fragmentu nie jest jednak w tym momencie dołączona do jego rodzica.źródło
post
(...), aby poczekać, aż zostanie wyświetlona. Prawdopodobnie spowoduje, że findViewById i inna inicjalizacja wonViewCreated
.onViewCreated
jest wywoływana natychmiast poonCreateView
(metodzie, którą inicjalizujesz i tworzysz wszystkie obiekty, w tym swojeTextView
), więc nie jest to kwestia wydajności.Ze strony programisty:
Źródło: fragment # onViewCreated
źródło
Lepiej jest przypisać podziały do pól w
onViewCreated
. Dzieje się tak, ponieważ platforma automatycznie sprawdza wartość null, aby upewnić się, że hierarchia widoków fragmentu została utworzona i zawyżona (jeśli używasz pliku układu XML).Fragment kodu z: FragmentManger.java
źródło
onCreateView
służy do tworzenia hierarchii widoków fragmentu. Może to być spowodowane inflacją XML lub dynamicznym tworzeniem (tj. Programowym tworzeniem widoków Java). Więc możeszinflate
w ogóle nie dzwonić . Ale powinieneś zwrócić widok nadrzędny, jeśli fragment musi mieć element interfejsu użytkownika. W przeciwnym razie wróćnull
.FragmentManager
kod i fragment kodu dlaperformCreateView
, który wywołujeonCreateView
github.com/android/platform_frameworks_base/blob/… , masz gwarancję kilku rzeczyonViewCreated
onCreateView
zwraca zawyżony widok.OnViewCreated
jest wywoływana zaraz po,onCreateView
a get ma parametr zawyżony widok. Typ zwracany tovoid
źródło
getView
rozmowyonCreateView()
jest odpowiednikiem fragmentuonCreate()
dla działań i jest uruchamiany podczas tworzenia widoku.onViewCreated()
uruchamia się po utworzeniu widoku.should I use one over the other for performance?
NIE . Nie ma dowodów na wzrost wydajności.W rzeczywistości istnieje
onCreate()
metoda we fragmentach, ale jest ona rzadko używana ( nigdy jej nie używam ani nie znajduję dla niej dobrego przypadku użycia).Zawsze używam
onCreateView()
we Fragments jako zamiennikaonCreate()
.I jestem z tego zadowolony.
źródło
onCreateView
jest to odpowiednik ActivityonCreate
.onCreate()
we Framents jest również metoda. Ale nigdy go nie używam (a przynajmniej nigdy go nie używam). Zawsze używamonCreateView()
w Fragments jako zamiennika.Dokumenty na
Fragment.onCreateView()
razie mówią:Nie ma potrzeby, abyśmy rozumieli dlaczego; po prostu musimy zrobić tak, jak mówią doktorzy, ale byłoby interesujące wiedzieć, dlaczego takie zalecenie istnieje. Moim najlepszym przypuszczeniem jest oddzielenie obaw , ale IMHO to sprawia, że jest to trochę bardziej skomplikowane, niż powinno.
źródło
setContentView()
wonCreate()
?Głównym powodem, dla którego chciałbym użyć,
onViewCreated
jest to, że oddziela wszelką logikę inicjalizacji od logiki inflacji / tworzenia hierarchii widoku, która powinna zostać umieszczona w plikuonViewCreate
. Wszystkie inne cechy wydajności wyglądają tak samo.źródło
Myślę, że główna różnica między nimi polega na tym, że używasz kotlin.in onCreateView () za każdym razem, gdy chcesz uzyskać dostęp do widoku w pliku xml, powinieneś użyć findViewById, ale w onViewCreated możesz po prostu uzyskać dostęp do swojego widoku, po prostu wywołując jego identyfikator .
źródło
onCreateView jest używany we fragmencie do tworzenia układu i powiększania widoku. onViewCreated służy do odwoływania się do widoku utworzonego powyższą metodą. Na koniec dobrą praktyką jest zdefiniowanie detektora akcji w onActivityCreated.
źródło