Quand utiliser FragmentManager :: putFragment et getFragment

J’ai une application qui utilise des fragments et je me demandais comment utiliser le même fragment dans une activité avec un volet double et une activité en tant qu’entité autonome. Je ne suis toujours pas sûr de la meilleure méthode pour y parvenir, mais j’ai remarqué que FragmentManager avait une fonction putFragment et getFragment. Ce qui me trouble, c’est que vous devez fournir un Bundle en paramètre pour obtenir et mettre des fonctions. Comment les activités séparées peuvent-elles avoir le même ensemble? De toute évidence, vous pouvez passer le Bundle en paramètre, mais à ce moment-là, je pense que vous ne faites que des dégâts.

Alors, quel est le bon scénario pour utiliser getFragment et putFragment? Veuillez inclure l’explication du paramètre Bundle.

La réponse de base:

Celles-ci ne sont utiles que lors de l’implémentation de onSaveInstanceState () et de la restauration de cet état dans onCreate (). Si vous n’implémentez pas onSaveInstanceState (), vous pouvez oublier ces méthodes et faire comme si elles n’existaient pas.

Le problème qu’ils résolvent: si vous voulez enregistrer une référence à un fragment dans votre “état d’instance enregistré”, vous ne pouvez pas simplement y placer une référence d’object. D’abord parce que vous ne pouvez pas mettre un object simple dans un ensemble. 🙂 Et la raison en est que le but de cet état enregistré est qu’il soit copié de votre processus, donc si votre processus doit être tué, il peut ensuite être recopié dans un nouveau processus pour que vous puissiez le réutiliser. -initialiser votre activité / fragment à partir de. Un object brut n’a de sens que dans le contexte du processus dans lequel il s’exécute. Il n’est donc pas possible de copier correctement la référence à un tel object en dehors de votre processus en cours et dans un autre.

Ainsi, ce que putFragment () / getFragment () fait, c’est placer un morceau de données dans le bundle donné qui peut identifier ce fragment sur 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 c’est l’identifiant entier interne pour ce fragment, qui sera utilisé plus tard quand le FragmentManager devra recréer ce fragment à partir d’un état précédemment enregistré … c’est recréé avec ce même identifiant, donc lorsque vous appelez getFragment (), il peut récupérer l’entier et l’utiliser pour déterminer l’object Fragment correct à renvoyer à l’appelant correspondant à celui précédemment enregistré.

En bref, c’est simplement la façon dont vous pouvez récupérer la référence d’un fragment après la restauration de l’activité. Par exemple, lorsque vous créez un fragment et l’utilisez tout au long de votre activité, après avoir modifié la configuration, votre activité est recréée, vous souhaitez que cette référence soit rétablie. Alors

 public void onSaveInstanceState(Bundle outState){ getFragmentManager().putFragment(outState,"myfragment",myfragment); } public void onRetoreInstanceState(Bundle inState){ myFragment = getFragmentManager().getFragment(inState,"myfragment"); } 

Vous avez une bonne explication de ce que put|getFragment peut être utilisé dans ce thread de groupe Android .

Bien que tout le sujet soit intéressant, la véritable réponse à votre question a été donnée par Dianne Hackborn ”

Vous pouvez également tirer parti des API FragmentManager pour enregistrer un “pointeur” de fragment dans un ensemble et le récupérer ultérieurement, afin de vous permettre de maintenir des pointeurs directs sur la sauvegarde / restauration d’état.