33 votes

Enregistrer l'objet, tout changement d'orientation

Comment économiser de l'Objet lors de changement d'orientation, depuis onRetainNonConfigurationInstance et getLastNonConfigurationInstance sont obsolètes. Et qui ne me sert avec compatibility package android-support-v4.jar FragmentActivity, où il montre Cannot override the final method from FragmentActivity

développeur de site de le dire

Utiliser le nouveau Fragment de l'API setRetainInstance(boolean) à la place;

Mais je ne sais pas comment enregistrer un objet personnalisé à l'aide de setRetainInstance

Mon scénario :
Dans mon activité, j'ai un AsyncTask avec la boîte de dialogue de progression. Ici, j'ai besoin de gérer de changement d'orientation.
Pour cela, j'ai eu une très bonne réponse de Mark Murphy, CommonsWare
arrière-plan-tâche-progrès-dialogue-orientation-changement-est-là-tout-de 100 de travail,
avec un exemple de projet

Depuis que je suis en utilisant le package de compatibilité android-support-v4.jar, FragmentActivity, je ne peux pas ignorer onRetainNonConfigurationInstance
Ne peut pas remplacer la méthode finale de FragmentActivity

Est-il une autre méthode pour l'enregistrement de mon objet personnalisé?

EDIT: Je ne peux pas faire mon AsyncTask tâche Parcelable (Si je ne me trompe pas), car il est l'utilisation de l'interface, le contexte etc. Mon AsyncTask

 public class CommonAsyncTask extends AsyncTask<Object, Object, Object>  {
        Context context;
        AsyncTaskServices callerObject;
        ProgressDialog progressDialog;
        String dialogMessag ; 
    ................

Je suis à la recherche, est-il des alternatives pour onRetainNonConfigurationInstance méthode, qui permettent d'économiser un objet complètement pendant le changement d'orientation, et plus tard, peut-être extraire à l'aide d' getLastNonConfigurationInstance

38voto

Giorgi Points 15760

Vous pouvez utiliser onRetainCustomNonConfigurationInstance.

Utiliser ce lieu de onRetainNonConfigurationInstance(). Récupérer plus tard avec getLastCustomNonConfigurationInstance().

12voto

Nikolay Elenkov Points 32843

Il y a deux alternatives:

  1. Utiliser un Loader. L' FragmentActivity va prendre soin de la sauvegarde/restauration de son état lors de la re-création.
  2. L'utilisation d'un fragment sans vue et appelez - setRetainInstance(true) sur il. Il y a un exemple dans la bibliothèque de compatibilité de la source, FragmentRetainInstanceSupport ou quelque chose du genre.

3voto

Graeme Points 9167

Lorsque votre Fragment est en pause, il va appeler cette méthode:

@Override
public void onSaveInstanceState(Bundle outState) {
    // Add variable to outState here
    super.onSaveInstanceState(outState);
}

La variable outState sera ensuite introduit dans le onCreate() la méthode lorsque le Fragment redémarre.

Vous pouvez enregistrer toutes les données qui est un type de base ou implémente Parcelable interface

-1voto

xjaphx Points 7156

Eh bien, citation d' Android Developers' References:

Cette méthode est appelée après onStart() lorsque l'activité est ré-initialisé à partir d'un état précédemment sauvegardé, donné ici dans savedInstanceState. La plupart des implémentations seront tout simplement utiliser onCreate(Bundle) pour restaurer leur état, mais il est parfois pratique de le faire ici après tout ce que l'initialisation a été fait ou pour permettre à des sous-classes de décider si vous souhaitez utiliser par défaut la mise en œuvre. L'implémentation par défaut de cette méthode effectue un la restauration de l'état d'affichage qui, auparavant, avaient été gelés par onSaveInstanceState(Bundle).

Concernant l'utilisation de l' onSaveInstanceState(), c'est mieux revenir vos objets/choses en utilisant onRestoreInstanceState() à la place.

Reportez-vous à l'Activité#onRestoreInstanceState()

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: