Conserver Fragment de l'état entre les Activités
Son possible pour conserver une Fragment
entre les Activités?
Permet de dire que j'ai une Activité A
avec Fragment F_Left
placé à gauche et le Fragment F_Right
placés à la droite. Si je veux lancer une nouvelle Activité et de garder Fragment F_Left
... comment puis-je le faire?
Puis-je conserver Fragment F_Left
de l'état entre les activités?
Remarque que je veux lancer une nouvelle Activité, car Fragment F_Left
est mon menu d'application et le Fragment F_Right
change complètement le contexte de l'utilisateur opérations... et mon application dispose de nombreuses opérations, il est donc logique d'avoir une Activité par opération.
Je sais que c'est possible de conserver Fragment
au sein d'une Activity
, mais comme Fragment
cycle de vie est étroitement liée à l'conteneur Activity
je ne sais pas si c'est possible de garder Fragment
de l'état entre les Activités.
Je suis inquiet à propos de l'INTERFACE utilisateur de l'état. À ma gauche, fragment, j'ai un Menu des opérations. Chaque opération aura nécessité de nombreuses étapes à effectuer. Et pour chaque étape, un écran s'affiche (Fragments placés à droite). J'ai donc regroupé les opérations dans les Activités, donc une Activité de gérer tous les fragments d'une opération, en plus de la gauche fragment. Lorsque l'utilisateur change de l'opération en cliquant sur la gauche de la fragment que je veux pour le lancement de la nouvelle Activité qui se chargera de tout le fonctionnement des fragments, et de conserver l'état de l'volet gauche de l'INTERFACE utilisateur.
OriginalL'auteur Axel M. Garcia | 2011-05-17
Vous devez vous connecter pour publier un commentaire.
Ne pas lancer une nouvelle activité.
Pas automatiquement. Il n'est pas le même fragment. Vous voulez passer des données entre les activités pour une utilisation par le fragment de la même manière que vous le feriez sans fragments à tous.
OriginalL'auteur CommonsWare
Depuis l'API de Niveau 13 (
HONEYCOMB_MR2
, juin 2011), vous peut d'enregistrer et de restaurer l'état d'un fragment de différentes activités.Pour sauver l'état, l'utilisation
FragmentManager.saveFragmentInstanceState()
, en fournissant une référence à laFragment
dont l'état que vous souhaitez enregistrer. LeFragment
doit être joint au moment de la tentative de sauvegarder son état.Pour restaurer l'état, l'utilisation
Fragment.setInitialSavedState()
avec la valeur de retour lorsque vous instenciate la mêmeFragment
.Vous pouvez rendre le
SavedState
l'objet à travers des activités comme vous le feriez pour tout autre objet; une façon est de la sous-classeApplication
comme indiqué ci-dessus (appState
est l'instance de notre sous-classe).SavedState
implémenteParcelable
, vous pouvez aussi passer l'état autour de la viaBundle.putParcelable()
, plutôt que de rester dans leApplication
instance.OriginalL'auteur user113215
En fonction de votre réponse à mon commentaire, j'ai un peu différente de réponse. Il peut ne pas être la meilleure réponse, dans votre situation, je vous laisse décider. 🙂
Maintenant vous groupez vos fragments en les activités, parce que c'est ce qui fait sens pour vous, mais vraiment, vous pouvez probablement traiter l'ensemble de la procédure de l'activité et de l'utilisation fragment de transactions pour masquer & show (ou de créer et de détruire) des fragments en tant que de besoin.
Puisque vous ne serez pas la création et la destruction activités, votre menu fragment de la gauche sera laissé intact, et vous n'aurez pas de problèmes avec son INTERFACE utilisateur de l'état. L'ensemble des opérations que vous souhaitez exécuter (ce qui a sans doute inclut toutes sortes de différents fragments sur la droite) n'a pas besoin d'être lancé dans une nouvelle activité, mais vous aurez à trouver un moyen de gérer la logique dont vous avez besoin pour le fragment de transactions (soit dans votre un über-activité ou dans un certain genre d'operations manager classe).
Je pense que ce sera beaucoup plus lisse pour les utilisateurs de votre application depuis l'activité reste en cours d'exécution - et vous ne modifiez que les pièces qui ont réellement besoin de changer.
OriginalL'auteur Mark D
Pour éventuellement répondre à votre question initiale, si vous déclencher une autre activité, alors je crois que vous pouvez enregistrer votre fragment de votre première activité en appelant FragmentManager::putFragment(...) quand onSaveInstanceState(...) est appelée et puis le récupérer plus tard, par exemple dans onCreate(...).
Cependant, je suis d'accord avec Marque D une réponse.
D'ailleurs je suis en train de faire quelque chose de similaire, j'ai un double panneau de configuration en vertu de laquelle le volet de gauche si fixe avec un certain nombre d'options à chaque option en invoquant un autre fragment dans le volet de droite. En outre la sélection d'une entrée dans le volet droit peut entraîner le droit fragment d'être remplacé par un autre.
Cependant, j'ai pris la formule qui consiste à gauche fragment est seul responsable de l'affichage et la manipulation des réponses immédiates sur le fragment qui s'affiche dans le volet de droite. En outre, chaque droite fragment est ensuite chargée de "remplacer" un nouveau fragment et de manipulation des résultats renvoyés. Je suis en utilisant setTargetFragment, getTargetFragment, et en appelant sur le fragment de la méthode onActivityResult de transmettre les résultats.
Pour moi, l'approche que j'ai pris n'est pas différent de quand mon application s'exécute sur un téléphone avec un seul panneau de laquelle l'option initiale de l'activité ne sait que sur les activités qu'il déclenche et par la suite, ces nouveaux le feu d'autres activités dont ils connaissent.
Il convient de mentionner que mon activité dans mon double volet application n'a pas vraiment faire grand chose mis à part le chargement du volet de gauche fragment et je n'arrive pas à voir le besoin pour une seule activité à avoir à gérer des centaines de fragments.
OriginalL'auteur PJL