2012-08-29 26 views
7

Estoy desarrollando una aplicación para Android. Si presiono un botón Atrás, se guardará el estado de mi aplicación. ¿Qué debo usar para guardar el estado ... confundido con todos estos onPause(), onResume(), o onRestoresavedInstance() ??? ¿Cuál de estos debería usar para guardar el estado de mi aplicación? Por ejemplo, cuando presiono el botón de salida, mi aplicación completa debería salir. He usado finish()?guarda el estado cuando se presiona el botón Atrás

public void onCreate(Bundle savedInstanceState) 
    { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    s1=(Button)findViewById(R.id.sn1); 
    s1.setOnClickListener(this); 
    LoadPreferences(); 
    s1.setEnabled(false); 
    } 

    public void SavePreferences() 
{ 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean("state", s1.isEnabled()); 
     } 
public void LoadPreferences() 
{ 
    System.out.println("LoadPrefe"); 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     Boolean state = sharedPreferences.getBoolean("state", false); 
     s1.setEnabled(state); 
     } 
@Override 
public void onBackPressed() 
{ 
    System.out.println("backbutton"); 
    SavePreferences(); 
    super.onBackPressed(); 
} 
+0

Si la actividad se está cerrando, utilice OnDestroy() – Aviral

+0

¿Qué tipo de estado de la aplicación que desea guardar? algunos cuadros de texto o valores de lista? – VendettaDroid

+0

Guardar valores para el cuadro de texto u otro ui importante podría hacerse con la ayuda de las preferencias compartidas. De modo que, incluso si la aplicación sale o destruye, uno puede leer los valores guardados de las preferencias compartidas. – VendettaDroid

Respuesta

8

Lo que tienes que hacer es, en lugar de utilizar KeyCode Volver, que tienen reemplazar el método de abajo en su actividad,

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
} 

Y guardar el estado de su botón usando SharedPrefrence, y la próxima vez cuando ingrese su Actividad obtenga el valor de Sharedpreference y configure el estado habilitado de su botón según corresponda.

ejemplo,

private void SavePreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putBoolean("state", button.isEnabled()); 
    editor.commit(); // I missed to save the data to preference here,. 
    } 

    private void LoadPreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    Boolean state = sharedPreferences.getBoolean("state", false); 
    button.setEnabled(state); 
    } 

    @Override 
public void onBackPressed() { 
    SavePreferences(); 
    super.onBackPressed(); 
} 

onCreate(Bundle savedInstanceState) 
{ 
    //just a rough sketch of where you should load the data 
    LoadPreferences(); 
} 
+0

Entendí el código. Esta es mi aplicación señor, donde el usuario selecciona un destino a través de google map. La aplicación rastrea la ubicación actual del usuario y cuando el usuario llega a la desinación la alarma se pospone. Así que tengo que guardar el estado de mi botón, el GPS debe ejecutarse en segundo plano, el tono de alarma seleccionado por el usuario debe guardarse, el estado del botón de repetición debe estar habilitado. Entonces, como me dijeron, tengo que definir SavePreferences y LoadPreferences para todos los botones que uso ???? – Sindu

+0

sí, puede guardar todos los tipos de datos primitivos utilizando la Preferencia compartida. Modifique el código anterior según su requisito y debería estar listo para continuar. Obtenga todos los estados del botón y guárdelo con un valor de clave diferente. también mantenga el nombre del tono usando la tecla de cadena y úselo cuando regrese. –

+0

¿puedo usar onPause o onResume para que mi instancia se guarde en lugar de esta SharedPreferences? – Sindu

3

puede utilizar de esta manera

public void onBackPressed() { 
    // Save settings here 
}; 

llama cuando la actividad se ha detectado la prensa del usuario de la tecla de retroceso. La implementación predeterminada simplemente finaliza la actividad actual, pero puede anularla para hacer lo que quiera.

guarde su estado de aplicación en este método.

Cuestiones relacionadas