2015-04-01 1 views
0

J'essaie de trouver quelque chose d'analogue à une méthode FragmentManager.peek().Quelle est la meilleure façon de savoir quel est le fragment actuellement affiché?

Le cas d'utilisation est que j'ai besoin d'envoyer un focus d'écran au fragment actuellement chargé. Cependant, je me retrouve à devoir garder une trace manuelle du fragment qui est actuellement affiché afin que je puisse lui dire de se concentrer.

Plus précisément, la situation est que j'ai un menu qui a un certain nombre de boutons. Lorsqu'un utilisateur clique sur un bouton, je dois transférer le focus du bouton vers une vue spécifique dans le fragment actuellement chargé - mais je n'ai aucun moyen de savoir quel fragment est actuellement chargé, il peut s'agir du fragment initial associé à l'élément de menu, ou il peut être tout à fait un autre fragment que l'utilisateur est arrivé à avoir creusé plus profondément dans le fragment d'origine ... donc ma logique doit être

pseudo... 
if(currentFragment == navButton.myFragmentType) 
    currentFragment.sendFocusToYourFirstRelevantElement() 
else 
    navButton.loadMyFragmentType() 

mon problème est que je ne sais pas ce que le fragment actuellement affiché est, à moins que je garde la trace manuellement, mais c'est vraiment moche.

En espérant qu'il existe une solution plus native.

Répondre

1

Vous devez suivre les Fragments manuellement. Réfléchissez au fonctionnement des Fragments: ils sont conçus pour être réutilisables et, en particulier, ils peuvent en contenir plusieurs sur l'écran à la fois. Pour cette raison, il n'est pas aussi simple que d'interroger le FragmentManager pour le Fragment actuellement affiché, car il n'a aucune connaissance de dont affiche actuellement le Fragment que vous voulez. La logique que cette connaissance nécessiterait n'est pas quelque chose qui peut être mis dans le FragmentManager car il est très spécifique à votre application.

Pour plus d'informations: What Fragments am I hosting and displaying?

+0

merci ... c'est très décevant. Mais ouais ... on dirait que tu as raison. Je pense que vous voudrez peut-être envisager de modifier votre autre réponse pour exploiter Fragment onResume() pour contourner le bouton de retour ... l'écoute de Back peut conduire à des résultats inattendus compte tenu des circonstances différentes au sein de l'implémentation. Mais onResume() est appelé de manière fiable par le fragment quand il revient du backstack ... c'est mon (moche) atm solution. –

+0

C'est vrai, onResume serait toujours appelé. Merci! – athingunique