1

J'ai une application à onglets, disons 2 onglets. Il a été initialement développé en utilisant ActivityGroup. Cependant, ayant réalisé que les multi-volets ne sont pas supportés dans ActivityGroup, j'ai décidé d'utiliser des fragments. Avant d'aborder le problème, laissez-moi vous parler de l'application.Conserver la vue sur le changement d'onglet de fragment

Alors, comme je l'ai dit avant qu'il ne soit une application à onglets

TabA---> Activity1---> Activity2---> Activity3 

TabB---> Activity4---> Activity5----> Activity6 

C'est le modèle de travail de mon ancienne application basée sur le groupe d'activités.

maintenant avec des fragments, cela changerait en quelque chose comme ci-dessous

FragmentActivity---> TabAFragment---> FragmentA1---> FragmentA2 
       | 
       ---> TabBFragment---> FragmentB1---> FragmentB2 

Chaque fragment se connecte au serveur pour les données sur la charge initiale.

Et dans la transaction, je remplace le fragment chaque fois que j'ajoute.

FragmentTransaction ft = manager.beginTransaction(); 
ft.replace(R.id.realtabcontent, fragment); 
ft.commit(); 

Qu'est-ce que l'on observe

Je n'ai qu'une activité (FragmentActivity-où onglets sont créés) pour ces deux fragments de tabulation. Je partage cette activité pour tous les onglets. Par exemple, je charge le fragment B1 dans tabB- gonfle une vue, récupère des données du serveur et affiche dans un ListView. Ensuite, je passe à l'autre tabA et charge le fragmentA1. Jusqu'ici tout va bien. Maintenant, si je retourne à tabB, je veux voir le listView qui a été chargé plus tôt. Ce qui se passe, c'est que tout commence à partir de la case départ.

Ceci est mon expérience de première main avec des fragments. J'ai fait un peu de recherche; Cependant, cela n'a pas vraiment aidé à réparer le mien.

Comment conserver une vue déjà chargée?

Des pensées?

Répondre

0

Salut, je suis assez nouveau à tous les fragments aussi. Cependant, je faisais quelque chose de similaire et j'ai trouvé que j'avais besoin d'ajouter le fragment courant à la pile arrière comme ça.

ft.addToBackStack (null); 

Cette ligne irait juste avant comit si votre code devient:

FragmentTransaction ft = manager.beginTransaction(); 
ft.replace(R.id.realtabcontent, fragment); 
ft.addToBackStack (null); 
ft.commit(); 

Espérons que cela est d'une certaine utilité.

Questions connexes