2017-07-25 8 views
0

J'ai ajouté un fragment à l'intérieur d'une activité en utilisant le code suivant:Comment obtenir la référence d'un fragment créé par la méthode FragmentTransaction.replace

FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.parent_fragment_container, new FolderStructureFragment()); 
ft.commit(); 

Ma question est de savoir comment puis-je obtenir la référence du fragment ajouté . J'ai cherché beaucoup de mots-clés liés à fragment et FragmentTransaction mais je n'ai pas trouvé quelque chose de proche de mon exigence qui, je pense, est une fonction très basique et devrait nous être offerte. Toute aide est très appréciée!

+0

double possible de [Obtenir l'objet fragment actuel] (https://stackoverflow.com/questions/6750069/get-the-current-fragment-object) –

Répondre

2

Il y a les deux possiblités principaux:

  • Vous pouvez rappeler la référence par vous-même
  • Par Tag
  • Par ID

Par exemple (presque la même par ID):

ft.replace(R.id.fragment_container, fragment, tagOfFragment); 
getSupportFragmentManager().findFragmentByTag(tagOfFragment); 
+0

Cela ne fonctionne pas pour moi. Il se peut que je crée et exploite le fragment à l'intérieur d'un autre fragment au lieu d'une activité. – user1870797

+0

Vous devriez être capable de trouver le fragment par les possibilités 2 et 3, peu importe où vous le créez. Appelez simplement findFragmentByTag à partir de SupportFragmentManager. – MPhil

+0

Je suis toujours retourné avec null en appelant getSupportFragmentManager(). FindFragmentByTag (tagOfFragment) ou findFragmentByID (IDOfFragment); J'ai même essayé getChildFragmentManager, mais toujours pas différent. – user1870797

0
FolderStructureFragment folderStructureFragment = new FolderStructureFragment(); 
    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
    ft.replace(R.id.parent_fragment_container, folderStructureFragment); 
    ft.commit(); 

Ici, folderStructureFragment est la référence pour le fragment nouvellement ajouté.

+0

Dans mon cas, folderStructureFragment n'est pas initialisé avec des ressources d'activité.C'est juste une nouvelle classe simple plutôt que de faire partie de son activité parentale. – user1870797

+0

Ok, s'il s'agit d'une classe, elle peut être initialisée de cette façon, puis 'folderStructureFragment' peut être utilisé n'importe où dans votre activité actuelle en tant que référence à la classe' FolderStructureFragment'. Essayer. –

+1

Cela semble possible de travailler. Mais je viens de trouver que je pouvais récupérer le fragment en appelant findFragmentByID maintenant. Je peux le faire dans un événement onClick. Donc je suppose que la raison pour laquelle j'ai échoué plus tôt était qu'il faudrait un peu de temps pour créer et insérer le fragment à l'intérieur du ViewGroup parent afin qu'un appel immédiat à findFragmentByID suivant FragmentTransaction.commit ne trouve rien. – user1870797

1

essayez d'utiliser le code ci-dessous.

FolderStructureFragment folderStructureFragment = (FolderStructureFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.parent_fragment_container); 
+0

Ça ne marche pas pour moi. – user1870797

+1

essayez d'utiliser 'getChildFragmentManager()' pour ajouter ou remplacer des fragments dans un autre fragment au lieu de 'getActivity(). GetSupportFragmentManager()' – codeWorm

+0

Je l'ai essayé. C'est encore le même. – user1870797

0

Il existe un moyen facile d'obtenir une référence à un fragment à tout moment, et ce, avec un TAG. Chaque fois que vous ajoutez un fragment, vous pouvez lui donner une étiquette spécifique, et vous pouvez le récupérer quand vous le voulez avec ce même TAG.

Voici comment vous ajoutez:

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
MyFragment myFragment = new MyFragment(); 
fragmentTransaction.add(R.id.fragment_container, myFragment,"myFragmentTag").commit(); 

Maintenant, disons, quelque part dans le code que vous avez besoin de la référence à ce fragment, il vous suffit d'appeler les éléments suivants

MyFragment myFragment = (MyFragment)getSupportFragmentManager().findFragmentByTag("myFragmentTag"); 
if(myFragment != null && myFragment.isAdded()){ //you should always do this check when you retrieve fragment instances 
    //do whatever you need with it 
} 
+0

Pas de chance pour moi. Il se peut que je crée et exploite le fragment à l'intérieur d'un autre fragment, mais une activité. – user1870797

+0

Cela ne fait pas de différence si vous lancez le gestionnaire de fragments à partir de l'activité, c'est-à-dire: 'getActivity(). GetSupportFragmentManager()' – Ricardo

+0

Cela semble possible. Mais je viens de trouver que je pouvais récupérer le fragment en appelant findFragmentByID maintenant. Je peux le faire dans un événement onClick. Donc je suppose que la raison pour laquelle j'ai échoué plus tôt était qu'il faudrait un peu de temps pour créer et insérer le fragment à l'intérieur du ViewGroup parent afin qu'un appel immédiat à findFragmentByID suivant FragmentTransaction.commit ne trouve rien. – user1870797