Quand utiliser FragmentManager::putFragment et getFragment
J'ai une application qui utilise des fragments et j'ai été jouer avec la façon d'utiliser le même fragment dans une Activité avec un double vitrage et d'une Activité autonome. Toujours pas sûr de la meilleure méthode pour compléter cela, mais j'ai remarqué que le FragmentManager a un putFragment et getFragment fonction. Ce qui me confond, c'est que vous devez fournir un ensemble de paramètres à la fois des fonctions get et put. Comment peut séparer les Activités ont le même panier? Évidemment, vous pourriez passer le Faisceau comme un paramètre, mais à ce point, j'ai l'impression que vous êtes juste faire un gâchis de choses.
Alors, quel est un bon scénario pour à l'aide de getFragment et putFragment? Veuillez inclure le Bundle paramètre explication.
- Je sais que
putFragment
serait utilisé en conjonction aveconSaveInstanceState
pour conserver une référence dans le fragment si l'activité est détruite à-dire un changement d'orientation ou si l'OS a besoin de récupérer de la mémoire, avec le fragment a été récupéré en direonCreate(...)
. Ce qui serait bon de savoir qui est des exemples de lorsque vous souhaitez conserver une référence. Je viens de terminer un fragment du projet du port où je n'ai jamais fait cela, mais peut-être que je devrais avoir. - J'ai un double volet mise en page pour la fois paysage et portrait pour les activités qui sont recréées sur un changement d'orientation. Sur les changements d'orientation de mon fragments de faire obtenir recréé et chargés dans leurs contenants comme mentionné ci-dessus, je n'ai pas trouvé la nécessité pour l'utilisation de
put|getFragment
, tout bon des exemples d'utilisation serait bon. - android est incroyablement idiot architecture est en train de me tuer...
Vous devez vous connecter pour publier un commentaire.
La réponse basique:
Ces ne sont utiles que lors de la mise en œuvre de onSaveInstanceState() et la restauration de l'état dans onCreate(). Si vous n'êtes pas la mise en œuvre de onSaveInstanceState(), vous pouvez oublier ces méthodes et prétendre qu'ils n'existent pas.
Le problème à résoudre: si vous souhaitez enregistrer une référence à un fragment dans votre "sauvé l'état de l'instance," vous ne pouvez pas simplement mettre une référence d'objet là. D'abord parce que bien que vous ne pouvez pas mettre de la plaine de l'objet dans un Bundle. 🙂 Et la raison pour cela est que le point de l'état enregistré est pour qu'il soit copié de votre processus, de sorte que si le processus doit être tué, il peut ensuite être copiés dans un nouveau processus pour vous de re-initialiser votre activité/fragment de la. Un objet brut n'est significative que dans le contexte du processus, il est en cours d'exécution, de sorte qu'il n'est pas possible de correctement copier la référence à un tel objet de votre processus actuel et dans l'autre.
Donc ce putFragment()/getFragment() suffit de placer un morceau de données dans le Bundle qui permet d'identifier ce fragment à travers une nouvelle instance de votre activité/fragment dans un autre processus. Exactement ce que cette représentation est, n'est pas défini, mais dans l'implémentation actuelle, il est de l'entière interne identificateur de fragment, qui sera utilisé plus tard lors de la FragmentManager besoins de re-créer ce fragment d'un état précédemment sauvegardé... c'est re-créé avec le même identifiant, de sorte que lorsque vous appelez getFragment (), il peut récupérer l'entier, et l'utiliser pour déterminer le Fragment d'objet pour retourner à l'appelant qui correspond à celle qui a été précédemment enregistré.
En bref, C'est juste la manière que vous pouvez récupérer la référence de fragment après
Activity
est restaurée. Par exemple, lorsque vous créez un fragment et de l'utiliser tout au long de votre activité, de sorte qu'après modification de la configuration, votre activité est recréé, vous voulez que référence. DoncVous avez une belle explication de ce
put|getFragment
peut être utilisé dans ce android groupe de thread.Bien que le thread entier est intéressant, la vraie réponse à votre question a été donnée par Dianne Hackborn"
onSaveInstanceState
? Voici une excellente réponse à ce sujet de Reto Meier: stackoverflow.com/questions/151777/...put|getFragment
, comme Dianne mentionné, est utilisé exactement cela, mais lorsque vous traitez avecFragments
.onSaveInstanceState
, c'est à dire pour mon double volet de gauche fragment de la liste I de l'utiliser pour sauvegarder la position sélectionnée (comme par FragmentLayout), cependant, je n'ai pas besoin de communiquer avec le bouton droit de la main, fragment.