Obtenir une référence à un fragment imbriqué à partir de FragmentTabHost
Dans mon application, j'utilise une Activity
qui tient une Fragment
avec FragmentTabHost
et donc tous ses onglets sont nested Fragments
.
À l'intérieur d'un Activity
qui est titulaire d'un Fragment
avec ses nested Fragment
on peut obtenir une référence à un à l'aide de onAttachedFragment()
.
Mais comment faire pour obtenir une référence à nested Fragment
de FragmentTabHost
?
source d'informationauteur Alex Bonel
Vous devez vous connecter pour publier un commentaire.
Bien, d'explorer le code source de
FragmentTabHost
j'ai constaté que quand il ajoute un fragment de l'onglet, il assignes une balise deTabSpec
imbriquéesFragment
.De sorte à obtenir la référence à cette
Fragment
nous devrions l'appelergetChildFragmentManager().findFragmentByTag(tabSpecTag)
J'ai essayé pendant un moment, mais j'ai été prise en
null
retourné à partir de laFragmentManager
parce que j'essayais d'accéder au gestionnaire deonCreateView()
immédiatement après l'ajout.Voici une bonne explication sur ce qui s'est passé
Il est également important de noter que
Fragment
onglets qui n'ont pas encore été sélectionné n'existe pas encore dans leFragmentManager
et il en sera de retournull
. J'ai eu autour de ce en appelantmTabHost.setCurrentTab(index)
avant d'essayer d'obtenir à laFragment
avec leFragmentManager
. Ce n'est pas très propre, mais ça fonctionne.Solutions ci-dessus sont également fonctionner, mais j'ai plus de solution facile,
Ici, vous devez mettre en œuvre FragmentTabHost.onTabChangeListener
Nous avons gardé une seconde de retard dans l'extraction du fragment de la childFragmentManager.
Remarque : Vous avez besoin de jeter mFragment qui fragment que vous avez utilisé.
J'ai trouvé une solution que j'aime un peu mieux car il n'a pas impliquant l'exécution de code avec un retard (ce qui est toujours douteux étant donné android de matériel de fragmentation et différentes vitesses de processeur).
Dans votre onTabChanged() la méthode, avant de vous essayez de trouver le fragment, appel executePendingTransactions() sur le fragment gestionnaire associé à votre tabHost. Il semble qu'il y a certains endroits dans le FragmentTabHost code source où ils devraient être, appelant executePendingTransactions (), mais ne parviennent pas à le faire.
Cela fonctionne à chaque fois l'onglet modifications à une exception près... le premier onglet est sélectionné vient encore de retour nul... Dans mon cas précis, j'ai été en mesure de gérer cette exception différemment de toute façon, en mettant un peu de code dans onResume.
Espère que cette aide.