À partir de 2019, j'essaie de suivre une meilleure pratique sur où commencer à observer LiveData
en fragments et si je devrais passer this
ou viewLifecycleOwner
comme paramètre à la observe()
.
Selon cela Documentation officielle de Google , je devrais observer dans onActivityCreated()
passe this
(fragment) en tant que paramètre.
Selon cela google échantillon , je devrais observer dans onViewCreated()
passe viewLifecycleOwner
comme paramètre.
Selon ceci Vidéo d'E/S , je ne devrais pas utiliser this
mais plutôt viewLifecycleOwner
, mais ne spécifie pas où devrais-je commencer à observer.
Selon ces pièges - POST , je devrais observer dans onActivityCreated()
et utiliser viewLifecycleOwner
.
Alors, où devrais-je commencer à observer? Et devrais-je utiliser this
ou viewLifecycleOwner
?
Si vous observerez à partir d'une activité, vous pouvez observer sur onCreate()
et utiliser this
pour la vie de cycle de vie comme indiqué ici :
Si vous avez un composant conscient de cycle de vie qui est connecté au cycle de vie de votre activité, il recevra l'événement On_create. La méthode annotée avec @onlifecycleEvent sera appelée de sorte que votre composant de cycle de vie peut effectuer tout code de configuration dont il a besoin pour l'état créé.
Maintenant, si vous observez dans un fragment, vous pouvez observer sur onViewCreated()
ou onActivityCreated()
et vous devez utiliser getViewLifecycleOwner()
et ici est pourquoi:
Obtenez un vœux de vie qui représente le cycle de vie de la vue du fragment. Dans la plupart des cas, cela reflète le cycle de vie du fragment lui-même, mais dans les cas de fragments indépendants, le cycle de vie du fragment peut être considérablement plus long que le cycle de vie de la vue elle-même.
Peu importe que vous le fassiez sur onViewCreated
ou onActivityCreated
. Les deux sont appelés lorsque le fragment est gonflé, onViewCreated
d'abord, onActivityCreated
par la suite. C'est vraiment une question de préférence.
L'objet LiveData
prend un LifecycleOwner
, et les deux Fragment
et Activity
implémente l'interface, vous devez donc avoir besoin de passer this
.
Comme dans l'E/S Talk Yigit dit, le fragment et sa vue ont desecycles différents. Vous auriez besoin d'identifier si votre LiveData
est associé au fragment ou à sa vue et transmettez celui désiré. Le compilateur acceptera les deux car les deux sont des implémentations de LifecycleOwner