El post que voy a dejar ahora es una solución bastante efectiva que encontré para un problema (un poco estúpido) que me he encontrado a la hora de desarrollas APP para Android. En esta entrada veremos como mantener los datos de nuestra aplicación cuando rotamos la pantalla ya que en algunos casos estos se pierden a realizar la rotación.
Cuando tenemos una aplicación y rotamos la pantalla, puede que perdamos toda la información que teníamos si no lo tratamos ya que Android destruye y recrea la actividad que está en ejecución. Por esto es por lo que hay que guardar los datos para no perderlos. Buscando un poco y echándole otro poco de imaginación encontré la siguiente solución.
Como mantener los datos en pantalla tras rotarla en nuestra APP Android:
Por la red hay diferentes enfoques sobre esto. Si toda nuestra información comprende tipos primitivos, Strings o si es serializable, podemos guardar su estado mediante el método onSaveInstanceState() en el Bundle que pasamos.
Otra solución nos permite devolver un objeto singular arbitrario que implementado mediante el método onRetailNonConfigurationInstance() cerca del final del método onCreate() para ver si hay algún dato previo guardado, y entonces asignarlo.
Usando onSaveInstanceState()
Utilizando como ejemplo una aplicación «básica» que realicé tiempo a tras para contar cuantas veces se hacía click en un botón y que adolecía de este mismo problema voy a usar el método onSaveInstanceState() y onRestoreInstanceState() para que cuando rotemos la pantalla, la información del contador siga tal y como lo dejamos. Como digo esta solución la empleo en la APP que nombro, pero es aplicable a cualquier otra aplicación realizando los cambios necesarios.
El método onSaveInstance() podemos agregarlo una vez cerrado el método onCreate() y quedaría algo así:
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putInt("CONTI", cont);
}
Lo que hace el código anterior es guardar el estado de la Activity antes de ser destruida con super.onSaveInstanceState(outState) y luego le agregamos con el método putInt() para guardar la información que queremos, en este caso queremos guardar lo que valía la variable cont que estamos usando para el TextView. Este método pide como argumento una clave, la cual he llamado “CONTI”, y el valor, que en este caso es cont.
Existen otros métodos como son putString(), putBoolean(), putChar() etc, pero en este caso guardamos un entero, por tanto hemos usado putInt().
A continuación, una vez que tenemos este método sustituido, vamos a sustituir otro llamado onRestoreInstanceState(), el cual es el que leerá el objeto Bundle que guardamos con anterioridad y pondrá de nuevo los datos en su sitio.
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
cont = savedInstanceState.getInt("CONTI");
tvCont.setText(String.valueOf(cont));
}
En este método, vemos que recibimos como parámetros un objeto Bundle, que en este caso es el que creamos en el método onSaveInstanceState(), el cual trae nuestra información guardada.
Lo primero que hacemos, es restaurar el estado mediante el método savedInstanceState(savedInstanceState), y luego le aplicamos a la variable cont el valor que tenía anteriormente, mediante la llamada al método getInt() que tiene el objeto savedInstanceState y pasando como argumento la clave que pusimos, en este caso “CONTI”.
Una vez hecho esto, volvemos a establecer al TextView el valor que tenía y ahora si rotamos nuestra aplicación. Tendremos la misma información que antes se nos mostraba.
