Quelle est la différence essentielle entre ces deux méthodes? Lorsque je crée un TextView, dois-je utiliser l'un sur l'autre pour les performances?
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);
}
android
android-layout
android-fragments
Forgeron
la source
la source
Réponses:
Nous sommes confrontés à des plantages lors de l'initialisation de la vue dans
onCreateView
.Parce que parfois la vue n'est pas correctement initialisée. Donc, utilisez toujours
findViewById
inonViewCreated
(lorsque la vue est entièrement créée) et elle transmet également la vue en paramètre.onViewCreated
est une garantie que la vue est entièrement créée.Appelé immédiatement après le retour de
onCreateView
(android.view.LayoutInflater, android.view.ViewGroup
,android.os.Bundle
), mais avant que tout état enregistré ne soit restauré dans la vue. Cela donne aux sous-classes une chance de s'initialiser une fois qu'elles savent que leur hiérarchie de vues a été complètement créée. La hiérarchie de vues du fragment n'est cependant pas attachée à son parent à ce stade.la source
post
(...) pour attendre qu'elle soit affichée. Fera probablement findViewById et autre initialisation dansonViewCreated
.onViewCreated
est appelée immédiatement aprèsonCreateView
(la méthode que vous initialisez et créez tous vos objets, y compris le vôtreTextView
), donc ce n'est pas une question de performances.Depuis le site du développeur:
Source: Fragment # onViewCreated
la source
Il est préférable d’affecter des sous-vues à des champs dans
onViewCreated
. Cela est dû au fait que l'infrastructure effectue une vérification automatique des valeurs nulles pour vous assurer que la hiérarchie de vues de votre fragment a été créée et gonflée correctement (si vous utilisez un fichier de mise en page XML).Extrait de code de: FragmentManger.java
la source
onCreateView
sert à créer la hiérarchie de vue du fragment. Cela peut se faire via l'inflation XML ou la création dynamique (c'est-à-dire la création de vues Java par programme). Vous ne pouvez donc pas du tout appelerinflate
. Mais vous devez renvoyer une vue parente si le fragment doit avoir un élément d'interface utilisateur. Sinon, retourneznull
.FragmentManager
code et le fragment deperformCreateView
, qui appelleonCreateView
github.com/android/platform_frameworks_base/blob/… , vous avez la garantie de quelques choses pour leonViewCreated
rappel du cycle de vie:onCreateView
renvoie la vue gonflée.OnViewCreated
est appelé juste aprèsonCreateView
et get a paramètre la vue gonflée. Son type de retour estvoid
la source
getView
appelonCreateView()
est l'équivalent Fragment deonCreate()
for Activities et s'exécute lors de la création de la vue.onViewCreated()
s'exécute après la création de la vue.should I use one over the other for performance?
NON . Il n'y a aucune preuve d'une amélioration des performances.Il existe en fait une
onCreate()
méthode dans Fragments aussi, mais elle est rarement utilisée (je ne l' utilise jamais , ni ne trouve un bon cas d'utilisation).J'utilise toujours
onCreateView()
dans Fragments en remplacement deonCreate()
.Et j'en suis content.
la source
onCreateView
c'est l'équivalent de l'activitéonCreate
.onCreate()
méthode dans Framents. Mais il n'est jamais utilisé (ou, du moins, je ne l' utilise jamais ). J'utilise toujoursonCreateView()
dans Fragments en remplacement.La documentation pour l'
Fragment.onCreateView()
instant dit:Inutile de comprendre pourquoi; nous devons simplement faire ce que dit la documentation, mais il serait intéressant de savoir pourquoi cette recommandation existe. Ma meilleure hypothèse est la séparation des préoccupations , mais à mon humble avis, cela rend les choses un peu plus compliquées qu'il ne le faut.
la source
setContentView()
enonCreate()
?La raison principale que j'utiliserais
onViewCreated
est qu'elle sépare toute logique d'initialisation de la logique d'inflation / création de hiérarchie de vue qui devrait aller dans leonViewCreate
. Toutes les autres caractéristiques de performance se ressemblent.la source
Je pense que la principale différence entre ceux-ci est lorsque vous utilisez kotlin.in 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 vue en appelant simplement son identifiant .
la source
onCreateView est utilisé dans le fragment pour créer une mise en page et gonfler la vue. onViewCreated est utilisé pour référencer la vue créée par la méthode ci-dessus. Enfin, il est recommandé de définir un écouteur d'action dans onActivityCreated.
la source