Estoy confundido cuando se trata de salvar un estado. Entonces sé que onSaveInstanceState(Bundle)
se llama cuando la actividad está a punto de ser destruida. Pero, ¿cómo almacena su información en él y la devuelve a su estado original onCreate(Bundle savedInstanceState)
? No entiendo cómo este paquete restaurará la información. Sería útil que alguien pudiera dar un ejemplo. La guía para desarrolladores no explica bien esto.
public class Conversation extends Activity {
private ProgressDialog progDialog;
int typeBar;
TextView text1;
EditText edit;
Button respond;
private String name;
private String textAtView;
private String savedName;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dorothydialog);
text1 = (TextView)findViewById(R.id.dialog);
edit = (EditText)findViewById(R.id.repsond);
respond = (Button)findViewById(R.id.button01);
if(savedInstanceState != null){
savedInstanceState.get(savedName);
text1.setText(savedName);
}
else{
text1.setText("Hello! What is your name?");
respond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = edit.getText().toString();
text1.setText("Nice to meet you "+ name);
}
});
}
}
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString(savedName, name);
}
}
Respuestas:
El
Bundle
es un contenedor de toda la información que desea guardar. Utiliza las funciones put * para insertar datos en él. Aquí hay una breve lista (hay más) de funciones de colocación que puede usar para almacenar datos enBundle
.En su
onCreate
función, estoBundle
se devuelve al programa. La mejor forma de comprobar si la aplicación se está recargando o iniciando por primera vez es:Para recuperar los datos, use las funciones get * como las funciones put *. Los datos se almacenan como un par nombre-valor. Esto es como un mapa de hash. Usted proporciona una clave y el valor, luego, cuando desea recuperar el valor, le da la clave y la función obtiene el valor. He aquí un breve ejemplo.
Su mensaje guardado se enviará a la pantalla. Espero que esto ayude.
fuente
Una nota importante que todos los nuevos desarrolladores de Android deben saber es que Android conservará automáticamente cualquier información en los widgets (TextView, botones, etc.) siempre que les asigne una ID. Eso significa que la mayor parte del estado de la interfaz de usuario se resuelve sin problemas. Solo cuando necesita almacenar otros datos, esto se convierte en un problema.
Desde Android Docs :
fuente
Una buena información: no es necesario verificar si el objeto Bundle es nulo en el método onCreate (). Utilice el método onRestoreInstanceState (), que el sistema llama después del método onStart (). El sistema llama a onRestoreInstanceState () solo si hay un estado guardado para restaurar, por lo que no es necesario verificar si el paquete es nulo
fuente
Almacenar información:
Si no desea restaurar la información en su método onCreate:
Estos son los ejemplos: Recreación de una actividad
fuente
Básicamente, onSaveInstanceState (Bundle outBundle) le dará un paquete. Cuando mires la clase Bundle, verás que puedes poner muchas cosas diferentes dentro de ella. En la siguiente llamada de onCreate (), solo obtiene ese Bundle como argumento. Luego, puede volver a leer sus valores y restaurar su actividad.
Digamos que tiene una actividad con un EditText. El usuario escribió un texto en su interior. Después de eso, el sistema llama a su onSaveInstanceState (). Usted lee el texto de EditText y lo escribe en el Bundle a través de Bundle.putString ("edit_text_value", theValue).
Ahora se llama a onCreate. Comprueba si el paquete suministrado no es nulo. Si ese es el caso, puede restaurar su valor a través de Bundle.getString ("edit_text_value") y volver a colocarlo en su EditText.
fuente
Esto es para información adicional.
Imagina este escenario
ActivityB lanza un nuevo ActivityAPrime por
ActivityAPrime no tiene ninguna relación con ActivityA.
En este caso, el Bundle en ActivityAPrime.onCreate () será nulo.
Si ActivityA y ActivityAPrime deberían ser la misma actividad en lugar de actividades diferentes, ActivityB debería llamar a finish () en lugar de usar startActivity ().
fuente
Si los datos no se cargan desde,
savedInstanceState
utilice el siguiente código.El problema es que la llamada a la URL no se completa por completo, así que verifique si los datos están cargados y luego mostrar el valor de instanceState.
fuente