J'ai un Activity
dans lequel je change le contenu en remplaçant un Fragment
. Dans le onCreate
de cette Activity
, je mets le premier Fragment
avec ce code:FragmentManager.findFragmentByTag renvoie toujours la valeur null
fm.beginTransaction().add(R.id.container, new FooFragment(), "f_0").commit();
Après cela, je veux changer cette Fragment
par un autre en fonction d'une Integer
(j'utiliser un tiroir), voici le Code:
int position = //I get my index here
Fragment f = fm.findFragmentByTag("f_" + position); //(1)
if (f == null) {
switch (position) {
case 0:
f = new FooFragment();
break;
case 1:
f = new BarFragment();
break;
//Etc...
}
}
//Then I replace the actual Fragment by the new one
fm.beginTransaction()
.replace(R.id.container, f, "f_" + position)
.commit();
Mon problème est que le code sur (1) null retour toujours si chaque fois que je change le Fragment
, il crée une nouvelle instance. Je veux avoir à tout moment une seule instance de chaque type Fragment
.
Merci.
obtenu le même numéro:/ Je l'ai testé avec un 'int' statique pour compter le nombre d'instance de la' FooFragment' et augmentent encore chaque 'Fragment'swap. – Chaniro
Donc si vous voulez vraiment une instance de fragment ('onCreate' ne sera appelée qu'une fois), vous ne devriez pas utiliser mu solution, et dans vos fragments, dans la méthode' onCreate' ajouter 'setRetainInstance (true)'. –