Je suis vraiment confus avec Fragment
cycle 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.
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.
getActivity()
sera une instance valide. Cela arrive après onCreateView()
quoiqueVotre pari le plus sûr pour l'existence d'une activité est:
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.
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é.