Tutoriales‎ > ‎

Guardar el estado de un Activity

publicado a la‎(s)‎ 14 oct. 2009 23:51 por Adrian Barajas   [ actualizado el 1 nov. 2012 23:48 ]
El mantener el estado anterior de un Activity demuestra que la aplicación desarrollada es profesional y ayuda al usuario en procesos repetitivos.

A continuación explicamos un método que se puede utilizar para soportar este comportamiento en las aplicaciones de una manera controlada y reutilizable.

Para este ejemplo vamos integrar guardar el estado del tabulador seleccionado para cuando se abra nuestra aplicación el tabulador seleccionado anteriormente se muestre marcado.

Para efectos de mostrar el mecanismo implementado no se incluye todo el codigo.

En algún lugar del metodo onCreate integramos la declaración de un tabhost:


     public void onCreate(Bundle savedInstanceState) {
 //..
         //..
// Create an Intent to launch an bond
   intent = new Intent().setClass(this, ActivityBond.class);

   // Initialize a TabSpec for each tab and add it to the TabHost
   spec = tabHost.newTabSpec("bond").setIndicator(getString(R.string.tab_bond),
                     res.getDrawable(R.drawable.sl_bond))
                 .setContent(intent);
   tabHost.addTab(spec);

 
   PrefsUtils pu = new PrefsUtils(PreferenceManager.getDefaultSharedPreferences(this));
   int noTab =  pu.loadTab();  
   
   onTabChanged("tab" + String.valueOf(noTab)  );
   tabHost.setCurrentTab(noTab);
       }

 Y el método onPause, integramos el código para guardar el estado del tabulador seleccionado.

       @Override
protected void onPause() {
     
 PrefsUtils pu = new PrefsUtils(PreferenceManager.getDefaultSharedPreferences(this));    
 pu.saveTab(getTabHost().getCurrentTab());
 super.onPause();
 
}

 En la declaración incluimos una clase que nos va a permitir guardar y recuperar la información bajo el modelo de datos estándar de Android. De tal manera que al llamar a loadTab se obtiene la información guardada del no. de tabulador seleccionado previamente. Una vez recuperado ese dato lo asignamos en setCurrentTab(noTab)
con esto definimos el tabulador correcto.

A continuación definimos la clase PrefsUtils:

package com.caleradreams.financalc;

import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import com.caleradreams.financalc.R;

public class PrefsUtils {
private SharedPreferences prefs;

        PrefsUtils(SharedPreferences prefs)  
this.prefs = prefs;
}

public int loadTab(){
int tabNo;
if (prefs.contains("tabmain.tab"))
     tabNo = prefs.getInt("tabmain.tab",0);
else
 tabNo = 0 ;
return (tabNo);
}
public boolean saveTab(int tab){
Editor mEditor = prefs.edit();
mEditor.putInt("tabmain.tab", tab);
mEditor.commit();
return true;
}
}

A través del objeto prefs, podemos acceder al repositorio de información basados en una clave en este caso "tabmain.tab", del cual recuperamos el indice seleccionado.

Siempre se debe evaluar si una llave especifica existe para poder recuperarla en este caso se utiliza. prefs.contains y el valor clave que deseamos evaluar. Posteriormente getInt nos permite recuperar un valor entero bajo la clave "tabmain.tab".

Para guardar información utilizamos la clase Editor, la cual nos permite guardar un entero en este caso con putInt la clave "tabmain.tab" y el dato tab. Finalmente debemos ejecutar el commit para que los cambios se vean reflejados.

De esta manera damos consistencia al estado de la aplicación y mantenemos la aplicación amigable.

Hasta la próxima.

Comments