studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android android-fragments

para - manual de programacion android pdf



Guardar objeto mientras cambia la orientación (4)

Cómo guardar Objeto mientras cambia la orientación, ya que onRetainNonConfigurationInstance y getLastNonConfigurationInstance están en desuso. Y que no puedo usar con el compatibility package android-support-v4.jar FragmentActivity , donde se muestra Cannot override the final method from FragmentActivity

sitio desarrollador dicen

Use el nuevo Fragment API setRetainInstance (boolean) en su lugar;

Pero no sé cómo guardar un objeto personalizado usando setRetainInstance

Mi escenario:
En mi actividad tengo un diálogo AsyncTask con progreso. Aquí necesito manejar el cambio de orientación.
Por eso obtuve una muy buena respuesta de Mark Murphy, CommonsWare
background-task-progress-dialog-orientation-change-is-there-any-100-working ,
con proyecto de muestra

Como utilizo el paquete de compatibilidad android-support-v4.jar, FragmentActivity , no puedo anular onRetainNonConfigurationInstance
No puede anular el método final de FragmentActivity

¿Hay algún método alternativo para guardar mi objeto personalizado?

EDITAR: No puedo hacer mi tarea AsyncTask Parcelable (si no estoy equivocado) ya que usa interfaz, contexto, etc. Mi AsyncTask

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

Estoy buscando, ¿hay alguna alternativa para el método onRetainNonConfigurationInstance , que guarda un objeto por completo mientras cambia la orientación y luego se puede recuperar utilizando getLastNonConfigurationInstance


Bueno, cita de Android Developers'' References :

Este método se llama después de onStart () cuando la actividad se reinicializa desde un estado previamente guardado, dado aquí en savedInstanceState. La mayoría de las implementaciones simplemente usarán onCreate (Bundle) para restaurar su estado, pero a veces es conveniente hacerlo aquí después de que se haya realizado toda la inicialización o para permitir que las subclases decidan si usarán su implementación predeterminada. La implementación predeterminada de este método realiza una restauración de cualquier estado de vista que haya sido previamente congelado por onSaveInstanceState (Bundle).

Con respecto al uso de onSaveInstanceState() , es mejor revertir tus objetos / cosas usando onRestoreInstanceState() .

Consulte la Actividad # en RestoreInstanceState ()


Cuando su Fragmento está en pausa llamará a este método:

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

La variable outState se outState al método onCreate () cuando se reinicie el Fragment.

Puede guardar cualquier información que sea un tipo básico o implementa Parcelable interfaz Parcelable


Hay dos alternativas:

  1. Usa un Loader FragmentActivity se ocupará de guardar / restaurar su estado al volver a crear.
  2. Use un fragmento sin una vista y llame a setRetainInstance(true) en él. Hay un ejemplo de esto en la fuente de la biblioteca de compatibilidad, FragmentRetainInstanceSupport o algo así.