Eh bien, j'ai un simple <FrameLayout>
:
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/FragmentContainer"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" />
Puis dans mon code, j'y ai ajouté un fragment:
FragClass aFrag = new FragClass();
getSupportFragmentManager().beginTransaction()
.replace(R.id.FragmentContainer, aFrag).commit();
Et ailleurs dans mon code, je veux obtenir cet objet FragClass (extends Fragment)
à partir de l'ID R.id.FragmentContainer
.
j'ai essayé
((ViewGroup) findViewById(R.id.FragmentContainer)).getChildAt(0)
ou
((FrameLayout) findViewById(R.id.FragmentContainer)).getChildAt(0)
mais ils renvoient le View
, au lieu du Fragment
qui lui est attaché.
je sais que je peux garder la variable aFrag
quelque part, donc je n'ai pas besoin de la retrouver. Mais je pense qu'il devrait y avoir un moyen de la récupérer.
Permettez-moi de conclure par une réponse complète :)
Dans ce cas, le Fragment
ajouté dynamiquement utilise l'ID du conteneur View
(ViewGroup
).
réf: http://developer.Android.com/guide/components/fragments.html#Adding
Remarque: Chaque fragment nécessite un identifiant unique que le système peut utiliser pour restaurer le fragment si l'activité est redémarrée (et que vous pouvez utiliser pour capturer le fragment pour effectuer des transactions, comme le supprimer). Il existe trois façons de fournir un ID pour un fragment:
- Fournissez l'attribut Android: id avec un ID unique.
- Fournissez l'attribut Android: tag avec une chaîne unique.
- Si vous ne fournissez aucun des deux précédents, le système utilise l'ID de la vue conteneur.
C'est parce que c'est un Fragment
après tout, nous devons utiliser getSupportFragmentManager().findFragmentById()
pour le récupérer, ce qui retourne un Fragent
, au lieu de findViewById()
qui retourne un View
.
La réponse à ce problème serait donc:
((aFrag) getSupportFragmentManager().findFragmentById(R.id.FragmentContainer))
Merci à @Luksprog.