web-dev-qa-db-fra.com

pourquoi pouvons-nous appeler getActivity () dans onCreateView qui s'exécutent avant onActivityCreated?

Je suis vraiment confus avec Fragmentcycle de vie , en particulier pour le temps d'appeler getActivity(). Parfois, vous ne pouvez pas obtenir Activity par getActivity(). Et cela a toujours causé des bugs déroutants.
Merci pour tout le monde peut résoudre le puzzle.

17
CodeAlien

getActivity() peut être nul pendant que votre fragment est en cours de préparation et sur le point d'être prêt.

Le cycle de vie du fragment est lié aux méthodes de rappel. Ces méthodes seront appelées quelque part dans le temps pendant la préparation de fragment.

  • Fragment.onActivityCreated (Bundle) est l'endroit où l'activité du fragment ne sera pas nulle, c'est-à-dire que getActivity() sera une instance valide. Cela arrive après onCreateView() quoique

Votre pari le plus sûr pour l'existence d'une activité est:

12
Dimitar Genov

Selon la documentation actuelle (décembre 2018) , cela montre que onAttach() est appelé juste au début avant onCreate() et onCreateView(). getActivity() devrait être sûr dans ces méthodes.

 Fragment lifecycle


Dans la documentation de Support v4 Fragment pour onActivityCreated() , il est indiqué que cette méthode est:

Appelé lorsque l'activité du fragment a été créée et que la hiérarchie de vues de ce fragment a été instanciée.

La partie importante ici est que "l'activité a été créée", c'est-à-dire que Activity.onCreate() a fini de s'exécuter. Avant ce point, nous sommes toujours dans cette méthode.

Cela peut être confirmé en regardant le code source FragmentActivity.onCreate() / vous pouvez suivre le processus de rattachement des fragments à l'activité au début de la méthode, puis l'état de fragment en cours de restauration, etc. Ainsi, l'activité doit être valide dans tous ces endroits, mais techniquement, le processus de création n’est pas terminé.

0
Richard Le Mesurier