Question

J'essaie de sauver mes états de vue dans mon fragment, mais je crains que je fasse fuir mon activité. Voici ce que je fais:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state){
   if(mView != null){
      View oldParent = mView.getParent();
      if(oldParent != container){
         ((ViewGroup)oldParent).removeView(mView);
      }
      return mView;
   }
   else{
      mView = inflater.inflate(R.id.fragview, null)
      return mView;
   }
}

Je suis inquiet parce que je sais que tous les points de vue tiennent à un contexte et je ne sais pas s'il s'agit du contexte d'activité ou du contexte d'application s'il est gonflé à partir de l'enflateur. Ce serait peut-être une meilleure idée de créer de manière pragmatique la vue et de définir ses attributs à l'aide de getActivity (). GetApplication () plutôt que d'utiliser l'inflatissement. J'apprécierais tout commentaire à ce sujet.

Merci!

Edit: fuite d'activité confirmée, bien que ce code fonctionne très bien, ne le faites pas: * (

Était-ce utile?

La solution

J'essaie de sauver mes états de vue dans mon fragment, mais je crains que je fasse fuir mon activité.

Utilisation onSaveInstanceState() (dans le fragment) et onRetainConfigurationInstance() (dans l'activité) pour maintenir les «états de vue» sur les modifications de configuration. Je ne suis pas tout à fait certain de ce que les autres "visualisent" auxquels vous pourriez faire référence.

Je suis inquiet parce que je sais que tous les points de vue tiennent à un contexte et je ne sais pas s'il s'agit du contexte d'activité ou du contexte d'application s'il est gonflé à partir de l'enflateur.

Depuis l'utilisation du Application Pour la vue, l'inflation ne semble pas bien fonctionner, vous devriez gonfler Activity. Et, par conséquent, les vues tiendront une référence à l'activité qui les a gonflés.

Autres conseils

@schwiz é a implémenté quelque chose de similaire.

Je utilise le setRetainInstance dans le fragment. Sur la disposition des fragments, j'ai un espace réservé à FrameLayout où je mets ma vue Web à l'intérieur.

Cette vue Web est créée par programmation sur l'onCreate du fragment à l'aide du contexte de l'application, et je fais un addView(webView) sur la disposition gonflée dans onCreateView().

webView = new WebView(getActivity().getApplicationContext());

Et sur OnDestroyView, je supprime simplement le WebView de mon espace réservé FrameLayout.

Cela fonctionne très bien, sauf si vous essayez de lire une vidéo en plein écran. Cela ne fonctionne pas car il s'attend à un contexte d'activité

J'essaye de sauver mes états de vue dans mon fragment

Afin d'économiser et de conserver l'état de View, vous pouvez simplement utiliser View.onSaveInstanceState () et View.onRestoreInstanceState (Parcelable state)

Cela vous aidera à gérer la sauvegarde et la restauration de la vue de la vue indépendamment de ni activité ni fragment. Voir cette réponse pour plus d'informations à ce sujet (Comment empêcher les vues personnalisées de perdre l'état à travers les modifications d'orientation de l'écran)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top