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()
.
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:
- Usa un
Loader
FragmentActivity
se ocupará de guardar / restaurar su estado al volver a crear. - 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í.
Puede usar onRetainCustomNonConfigurationInstance.
Use esto en lugar de onRetainNonConfigurationInstance (). Recupere más tarde con getLastCustomNonConfigurationInstance ().