Reinicio de Actividades en Android al cambiar orientación - Más allá de lo que ves

jueves, 4 de noviembre de 2010

Reinicio de Actividades en Android al cambiar orientación

Otra vez con Android, ya lo se, ya lo se, cuando el tonto coge la linde se acaba la linde...

Quiero recoger una cosa que me ha estado ocurriendo en unas pruebas que estoy haciendo con Android y para la cual no he encontrado mucha información al respecto y que no se suele reflejar en los ejemplos de trabajo con ListView que he visto.

Tengo una actividad que extiende ListView y que mediante un ProgressDialog informa al usuario de que se estan cargando los datos y cuando se han cargado los muestra con un Adapter específico y oculta el ProgressDialog, hasta aquí todo perfecto. El problema vino cuando instalé la aplicación en el terminal, al cambiar la orientación de este los datos se volvían a recargar estuviese en la pestaña que estuviese.

Después de mucho buscar encontré un post en el que se hacía referencia a la siguiente url: http://developer.android.com/guide/topics/resources/runtime-changes.html#RetainAnObject

Basicamente lo que explican los de google es lo que yo quería hacer es decir que si los datos ya se han obtenido que no los vuelva a obtener simplemente que los añada al ListView correspondiente.

Como pone en el artículo basta con:

1. Sobreescribir el método onReatinNonConfigurationInstance retornando el objeto que queremos retener:

@Override
public Object onRetainNonConfigurationInstance() {
final MyDataObject data = collectMyLoadedData();
return data;
}
2. Posteriormente en el onCreate utilizar getLastNonConfigurationInstance para obtener el objeto que mentenemos y si no es nulo lo utilizamos:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView
(R.layout.main);

final MyDataObject data =
(
MyDataObject) getLastNonConfigurationInstance();
if (data == null) {
data
= loadMyData();
}
...
}


Saludos !!!

2 comentarios:

  1. Hola Mazinger, estoy haciendo una aplicación similar. ¿Me podrías indicar como pusiste el ProgressDialog? También tengo una actividad que extiende ListView con un adaptador.

    Gracias de antemano.

    saludos.

    ResponderEliminar
  2. Hola oconnell-2k4

    Ahora mismo no tengo acceso al codigo.

    Durante el finde intento crear una entrada paso a paso del uso del ProgressDialog.

    Un saludo.

    ResponderEliminar