¿Qué guardar y qué no?
Alguna vez se preguntó por qué el texto en el EditText
se guarda automáticamente mientras cambia la orientación? Bueno, esta respuesta es para ti.
Cuando una instancia de una Actividad se destruye y el Sistema recrea una nueva instancia (por ejemplo, cambio de configuración). Intenta recrearlo utilizando un conjunto de datos guardados del estado de actividad anterior ( estado de instancia ).
El estado de instancia es una colección de pares clave-valor almacenados en un Bundle
objeto.
Por defecto, el Sistema guarda los objetos Ver en el Paquete, por ejemplo.
- Texto en
EditText
- Posición de desplazamiento en a
ListView
, etc.
Si necesita guardar otra variable como parte del estado de instancia, debe ANULAR el onSavedInstanceState(Bundle savedinstaneState)
método.
Por ejemplo, int currentScore
en una GameActivity
Más detalles sobre onSavedInstanceState (Bundle savedinstaneState) al guardar datos
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
Entonces, por error, si olvida llamar,
super.onSaveInstanceState(savedInstanceState);
el comportamiento predeterminado no funcionará, es decir, el texto en EditText no se guardará.
¿Cuál elegir para restaurar el estado de la actividad?
onCreate(Bundle savedInstanceState)
O
onRestoreInstanceState(Bundle savedInstanceState)
Ambos métodos obtienen el mismo objeto Bundle, por lo que realmente no importa dónde escriba su lógica de restauración. La única diferencia es que, en el onCreate(Bundle savedInstanceState)
método, deberá realizar una comprobación nula mientras no sea necesaria en este último caso. Otras respuestas ya tienen fragmentos de código. Puedes referirlos.
Más detalles sobre onRestoreInstanceState (Bundle savedinstaneState)
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from the saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
}
Siempre llame super.onRestoreInstanceState(savedInstanceState);
para que el sistema restaure la jerarquía de vistas de forma predeterminada
Prima
El sistema onSaveInstanceState(Bundle savedInstanceState)
lo invoca solo cuando el usuario tiene la intención de volver a la Actividad. Por ejemplo, está utilizando la aplicación X y de repente recibe una llamada. Se mueve a la aplicación de llamada y vuelve a la aplicación X. En este caso, elonSaveInstanceState(Bundle savedInstanceState)
, se invocará método.
Pero considere esto si un usuario presiona el botón Atrás. Se supone que el usuario no tiene la intención de volver a la Actividad, por lo tanto, en este caso onSaveInstanceState(Bundle savedInstanceState)
no será invocado por el sistema. Señale que debe considerar todos los escenarios al guardar los datos.
Enlaces relevantes:
Demostración sobre comportamiento predeterminado
Documentación oficial de Android .