Différence entre onCreateView et onViewCreated du Fragment
Quelle est la différence essentielle entre ces deux méthodes? Quand je crée un TextView, devrais-je utiliser l'un sur l'autre pour la performance?
Edit:
Quelle est la différence de
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);
}
J'ai rajouté un edit pour expliquer à ma confusion. Si une méthode vient après les autres, pourquoi y aurait-il deux? Ne peut pas tous la création de la vue dans une seule méthode, comme au-dessus?
Si vous avez google à deviner, il y a probablement mal nommée méthodes.
Si vous avez google à deviner, il y a probablement mal nommée méthodes.
OriginalL'auteur Smith | 2014-08-04
Vous devez vous connecter pour publier un commentaire.
Nous sommes confrontés à des accidents de l'initialisation de vue en
onCreateView
.Parce que parfois, la vue n'est pas correctement initialisé. Il faut donc toujours utiliser
findViewById
dansonViewCreated
(lorsque la vue est entièrement créé), et il passe aussi le point de vue en tant que paramètre.onViewCreated
est un assurez-vous que la vue est entièrement créé.Appelé immédiatement après
onCreateView
(android.view.LayoutInflater, android.view.ViewGroup
,android.os.Bundle
) a retourné, mais avant tout sauvé de l'état a été restauré à la vue. Cela donne des sous-classes, une chance pour initialiser eux-mêmes une fois qu'ils savent leur point de vue, la hiérarchie a été entièrement créée. Le fragment de la vue de la hiérarchie n'est cependant pas attaché à sa mère à ce point.post
(...) la méthode à attendre jusqu'à ce qu'il est illustré. Sera probablement faire findViewById et d'autres initialisation dansonViewCreated
.Où était ce texte cité? Je ne pouvais pas le trouver dans la documentation officielle.
Pouvez-vous s'il vous plaît poster la référence du Développeur de site de la déclaration citée ci-joint?
voir mise à jour de réponse
OriginalL'auteur Xar E Ahmer
onViewCreated
est appelée immédiatement aprèsonCreateView
(la méthode d'initialisation et de créer tous les objets, y compris votreTextView
), il n'est donc pas une question de performance.À partir du site du développeur:
Source: Fragment#onViewCreated
OriginalL'auteur u3l
Il est préférable de faire une cession de sous-vues de champs de
onViewCreated
. C'est parce que le cadre n'automatique null vérifier pour vous assurer que votre Fragment de la vue de la hiérarchie a été créé et gonflé (si vous utilisez un XML fichier de mise en page) correctement.Extrait de Code à partir de: FragmentManger.java
Ce qui est intéressant, avez-vous d'autres ressources sur les raisons de cette approche est la meilleure? Est-ce à dire tous les onCreateView méthode ne doit consister en un "retour inflater.inflate(R. layout.layout_file, conteneur, false);" et onviewcreated devraient avoir tous les "findViewById" méthodes? Ce gain de performance ne ce créer? Serait-il rendre les transitions plus rapides?
Pour répondre à votre première question,
onCreateView
est utilisé pour créer le fragment de la vue de la hiérarchie. Ce peut être via XML de l'inflation ou de la création dynamique (c'est à dire, la création de Java vues par programmation). Donc vous ne pouvez pas appelerinflate
à tous. Mais vous devez revenir à la vue parente si le fragment doit avoir un élément de l'INTERFACE utilisateur. Sinon retournull
.Il n'y a pas un gain de performance à tous. En regardant les
FragmentManager
et le fragment de code pourperformCreateView
, qui appelleonCreateView
github.com/android/platform_frameworks_base/blob/..., vous avez la garantie d'un peu de choses tho pour leonViewCreated
du cycle de vie de rappel:1. Le point de vue de la hiérarchie sera apposée sur le conteneur si le fragment a été ajouté de manière dynamique à l'activité de son parent. 2. Vous pouvez faire en toute sécurité vue des recherches sans se soucier de Npe. 3. Je ne suis pas familier avec les animations, mais le fragment de transition ont déjà été commencé (c'est à dire, envoyé sur le thread de l'INTERFACE utilisateur message de la file d'attente).
OriginalL'auteur orangemako
onCreateView
renvoie la gonflés vue.OnViewCreated
est appelé juste aprèsonCreateView
et a le paramètre gonflé vue. Son type de retour estvoid
onCreateView devrait revenir rapidement. OnViewCreate peut être utilisé pour effectuer l'initialisation des trucs, par exemple. Comme je l'ai dit, onViewCreated a comme paramètre de la Vue qui vous est gonflé à l'intérieur de onCreateView. Ainsi, vous pouvez éviter la
getView
appelOriginalL'auteur Blackbelt
onCreateView()
est le Fragment équivalent deonCreate()
pour des Activités et des pistes de pendant la création de la Vue.onViewCreated()
s'exécute après la Vue a été créée.should I use one over the other for performance?
PAS. Il n'y a aucune preuve d'une augmentation des performances.En fait il y a un
onCreate()
méthode dans Framents, trop.Mais c'est rarement utilisé (je ne jamais l'utiliser, ni trouver un bon cas d'utilisation).
J'ai toujours utiliser
onCreateView()
en Fragments comme un remplacement pouronCreate()
.Et j'en suis heureux.
pourquoi? Je pense aussi que
onCreateView
est un équivalent de l'ActivitéonCreate
.Eh bien, nPace n'est pas totalement faux, puisqu'il y a un
onCreate()
méthode dans Framents. Mais c'est jamais (ou, au moins, je ne jamais l'utiliser). J'ai toujours utiliseronCreateView()
en Fragments comme un remplacement.d'accord avec vous! Quelques tutoriels utiliser onCreate de mettre setHasOptionsMenu(vrai), mais je pense qu'il serait mieux de le faire dans onCreateView ou onViewCreated.
Je ne totalement d'accord. Peut-être que j'ai utilisé les mauvais mots dans ma réponse.
OriginalL'auteur Fantômas
je pense que la principale différence entre ces lorsque vous utilisez kotlin.dans onCreateView() chaque Fois que vous souhaitez accéder à la vue dans votre fichier xml, vous devez utiliser findViewById mais dans onViewCreated vous pouvez simplement accéder à votre avis tout simplement par l'appel de l'id.
Non, c'est pas.. oncreate vue instancie la vue, onviewcreated est appelée après oncreateview et avant d'être enregistrés états sont restaurés... c'est plus un problème de synchronisation dans le cycle de vie du fragment
OriginalL'auteur Shahriar enayaty
onCreateView est utilisé dans le fragment de créer la mise en page et de gonfler à vue.
onViewCreated est utilisé pour faire référence à la vue créée par la méthode ci-dessus.
Enfin c'est une bonne pratique pour définir l'action de l'écouteur de dans onActivityCreated.
OriginalL'auteur Salu Khadka
La principale raison je utiliser
onViewCreated
est depuis, il se sépare de toute logique d'initialisation du point de vue de la hiérarchie de l'inflation/la création de la logique qui devrait aller dans leonViewCreate
. Toutes les autres caractéristiques de performance de la même manière.OriginalL'auteur AmeyaB