Bonjour,

J'utilise un système de DrawerLayout dans mon application et donc des Fragments que j’appellerais A, B, C, D, ...

Dans le Fragment A, j'ai une listView de quelques lieux. Quand l'utilisateur clique sur un des lieu, je remplace le Fragment A par le Fragment L.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
	fragment = new FragmentLieux();
	Bundle args = new Bundle();
	args.putInt("idLieu", id);
	fragment.setArguments(args);
	.
	.
	.
	if(fragment!=null) {
		FragmentTransaction fm = fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).addToBackStack(null).commit();
	}
Le fragment L contient une liste de véhicules disponibles sur ce lieu. Au sommet de ce fragment L, j'affiche dans la barre d'action la liste de tous les lieux pour que l'utilisateur puisse rapidement passer d'un lieu à l'autre.

Important : Lorsque l'utilisateur clique sur cette liste déroulante, je rafraîchis mon curseur (en gros, je ne passe par par le fragmentManager) et affiche ainsi la liste des véhicules présent dans le nouveau lieu sélectionné.

Quand l'utilisateur clique dans la listView du fragment L (liste de véhicules), je remplace le Fragment L par le Fragment V en passant par le fragmentManager. (idem que plus haut).

Pour finir, voici le code qui s'exécute dans mon activité lorsque l'utilisateur revient en arrière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
	public void onBackPressed() {
		fragmentManager.popBackStack();
	}
Premier cas :
Mon code fonctionne bien quand l'utilisateur suit un chemin "direct". Par exemple :
Fragment A => clique sur le lieu 12 => clique sur le véhicule 45 => onBackPressed(revient au lieu 12) => clique sur le véhicule 32 => onBackPressed(revient au lieu 12) => onBackPressed(revient au Fragment A)

Second cas :
Mon code ne fonctionne pas quand l'utilisateur suit un chemin "indirect", en utilisation la liste de lieu dans la barre d'action du Fragment L.
Fragment A => clique sur le lieu 12 => utilise la liste déroulante dans la barre d'action et prend le lieu 15 => clique sur le véhicule 102 => onBackPressed(revient au lieu 12 alors qu'il devrait revenir au lieu 15) => onBackPressed(revient au Fragment A (ça, c'est juste, c'est ce que je veux))

J'ai passé ma journée à creuser plusieurs pistes mais je n'y arrive pas... Je précise un détail important : je n'ai pas utilisé le fragmentManager pour changer de lieu via l'actionBar pour deux raisons. Primo je veux que quand l'utilisateur est sur le Fragment L et qu'il presse sur le bouton "revenir en arrière" il revienne sur le Fragment A (Il ne doit pas faire lieu 15 => OnBackPressed => lieu 12). Deuxio, j'ai fait un essaie et ça merdouille au niveau de l'interface (si je change d'orientation mon Fragment L puis que je reviens sur mon Fragment A, j'ai des "restes" du Fragment L sur mon Fragment A... j'avoue ne pas trop comprendre pourquoi ce changement d'orientation provoque ce bug)

Voici donc mes questions :
  • Quand je sélectionne un nouveau lieu dans ma barre d'action du Fragment L, comment "changer" l'idLieu du Bundle que j'ai passé au fragmentManager quand j'ai lancé mon Fragment L la première fois ?
  • Y aurait-il une autre manière de faire?


Bien à vous
Greg