70 votes

Pourquoi utiliser le Fragment#setRetainInstance(boolean)?

Je trouve Fragment#setRetainInstance(vrai) à confusion. Voici la Javadoc, extrait de l' Android Developer API:

public void setRetainInstance (boolean conserver)

Contrôler si un fragment de l'instance est conservé à travers l'Activité de re-création (par exemple, un changement de configuration). Ce ne peut être utilisé avec des fragments de pas dans la pile de retour. Si elle est définie, le fragment du cycle de vie sera légèrement différente lorsqu'une activité est recréée:

  • onDestroy() ne sera pas appelé (mais onDetach() seront toujours, parce que le fragment est détaché de son activité actuelle).
  • onCreate(Bundle) ne sera pas appelé depuis le fragment est pas besoin d'être re-créé.
  • onAttach(Activité) et onActivityCreated(Bundle) va encore être appelé.

Question: Comment faites-vous en tant que développeur de l'utiliser, et pourquoi faut-il rendre les choses plus faciles?

92voto

CommonsWare Points 402670

Comment faites-vous en tant que développeur d'utiliser cette

Appelez setRetainInstance(true). En général, je le faire dans onCreateView() ou onActivityCreated(), où je l'utilise.

et pourquoi faut-il rendre les choses plus faciles?

Il a tendance à être plus simple que d' onRetainNonConfigurationInstance() pour le traitement de la rétention de données à travers des changements de configuration (par exemple, la rotation de l'appareil du mode portrait au mode paysage). Non-conservé des fragments sont détruits et recréés sur le changement de configuration; rétention de fragments ne le sont pas. Par conséquent, toutes les données détenues par ceux conservés des fragments est disponible à la post-configuration de changement d'activité.

49voto

DeeV Points 16141

Il est très utile dans le maintien de la longue course de ressources ouvertes telles que les sockets. Avoir une INTERFACE moins fragment qui contient des références à des sockets bluetooth et vous n'aurez pas à vous soucier de les reconnecter lorsque l'utilisateur retourne le téléphone.

Il est également utile dans la conservation des références à des ressources qui prennent beaucoup de temps à charger comme des bitmaps de serveur ou de données. Charger une fois, de le conserver dans un fragment conservé, et lorsque l'activité est rechargé, il est toujours là et vous n'avez pas à le reconstruire.

34voto

Amorgos Points 2163

Ajouté cette réponse très tardive, mais je pensais que ce serait rendre les choses plus claires. Dire après moi. Lorsque setRetainInstance est:

FAUX

  • Fragment devient re-créé sur la config de changement. NOUVELLE INSTANCE est créée.
  • TOUS du cycle de vie des méthodes sont appelées à changer de config, y compris onCreate() et onDestroy().

VRAI

  • Fragment de ne pas re-créé sur la config de changement. MÊME INSTANCE est utilisée.
  • Tous du cycle de vie des méthodes sont appelées à changer de config, à PART onCreate() et onDestroy().
  • Le maintien d'une instance de ne pas fonctionner lorsqu'il est ajouté à la backstack.

N'oubliez pas que ce qui précède s'applique à DialogFragments ainsi que des Fragments.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X