web-dev-qa-db-fra.com

Différence entre onCreateView et onViewCreated in Fragment

Quelle est la différence essentielle entre ces deux méthodes? Lorsque je crée un TextView, dois-je en utiliser un pour la performance?

Edit: Quelle est la différence avec

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);
}
66
Smith

Nous sommes confrontés à des incidents d'initialisation de la vue dans onCreateView.

Vous devriez gonfler votre présentation dans onCreateView mais ne pas initialiser d'autres vues à l'aide de findViewById dans onCreateView

Parce que parfois, la vue n'est pas correctement initialisée. Donc, utilisez toujours findViewById dans onViewCreated (lorsque la vue est entièrement créée) et passe également la vue en tant que paramètre.

onViewCreated est un moyen de s’assurer que la vue est entièrement créée.

36
Xar E Ahmer

onViewCreated est appelé immédiatement après onCreateView (la méthode que vous initialisez et créez tous vos objets, y compris votre TextView), il ne s'agit donc pas d'une question de performance.

Sur le site du développeur:

onViewCreated (Afficher la vue, Bundle savedInstanceState)

Appelé immédiatement après le retour de onCreateView (LayoutInflater, ViewGroup, Bundle), mais avant que tout état enregistré ait été restauré dans la vue. Cela donne aux sous-classes une chance de s'initialiser une fois qu'ils savent que leur hiérarchie de vues a été complètement créée. La hiérarchie de vue du fragment n'est toutefois pas attachée à son parent à ce stade.

Source: Fragment # onViewCreated

32
u3l

Il est préférable d’affecter des vues secondaires aux champs de la variable onViewCreated. Cela est dû au fait que la structure effectue un contrôle null automatique 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 présentation XML).

Extrait de code de: FragmentManger.Java

// This calls onCreateView()
f.mView = f.performCreateView(f.getLayoutInflater(f.mSavedFragmentState), null, f.mSavedFragmentState);

// Null check avoids possible NPEs in onViewCreated
// It's also safe to call getView() during or after onViewCreated()
if (f.mView != null) {
    f.mView.setSaveFromParentEnabled(false);
    if (f.mHidden) f.mView.setVisibility(View.GONE);
    f.onViewCreated(f.mView, f.mSavedFragmentState);
}
21
orangemako

onCreateView renvoie la vue gonflée. OnViewCreated est appelé juste après onCreateView et get a paramètre la vue gonflée. Son type de retour est void

12
Blackbelt

onCreateView() est l'équivalent en fragment de onCreate() pour les activités et exécute pendant la création de la vue.
onViewCreated() exécute après la vue a été créée.

should I use one over the other for performance?NO. Il n'y a aucune preuve d'amélioration de la performance.

Il existe également une méthode onCreate() dans Framents.

Mais c’est (rarement} _ utilisé (je l’utilise jamais, et ne trouve pas un bon cas d’utilisation pour cela).
J'utilise toujours onCreateView() dans Fragments en remplacement de onCreate().
.__ Et je suis content de ça.

4
Fantômas

je pense que la principale différence entre ceux-ci est lorsque vous utilisez kotlin.fr onCreateView () à chaque fois que vous souhaitez accéder à l'affichage dans votre fichier xml, vous devez utiliser findViewById mais dans onViewCreated vous pouvez accédez simplement à votre vue en appelant simplement son identifiant. 

2
Shahriar enayaty

onCreateView est utilisé dans fragment pour créer une disposition et une vue gonflée . onViewCreated est utilisé pour référencer la vue créée par la méthode ci-dessus . 

0
Salu Khadka

La raison principale pour laquelle je voudrais utiliser onViewCreated est qu’elle sépare toute logique d’initialisation de la logique d’inflation/création dans la hiérarchie des vues, qui devrait figurer dans onViewCreate. Toutes les autres caractéristiques de performance se ressemblent.

0
AmeyaB