Cómo usar el ejemplo de onSavedInstanceState por favor

Estoy confundido cuando se trata de salvar un estado. Así que sé que onSaveInstanceState(Bundle) se llama cuando la actividad está a punto de ser destruida. Pero, ¿cómo guardar la información en ella y onCreate(Bundle savedInstanceState) a su estado original en 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 de Dev no hace un buen trabajo de explicar 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); } } 

El Bundle es un contenedor para toda la información que desea guardar. Utiliza las funciones put * para insertar datos en ella. Aquí hay una breve lista (hay más) de funciones de put que puede usar para almacenar datos en el Bundle .

 putString putBoolean putByte putChar putFloat putLong putShort putParcelable (used for objects but they must implement Parcelable) 

En su función onCreate , este Bundle se devuelve al programa. La mejor manera de comprobar si la aplicación se está recargando o se ha iniciado por primera vez es:

 if (savedInstanceState != null) { // Then the application is being reloaded } 

Para recuperar los datos, utilice las funciones get * como las funciones put *. Los datos se almacenan como un par nombre-valor. Esto es como un hashmap. Proporciona una clave y el valor, entonces cuando desea que el valor de nuevo, le da la clave y la función obtiene el valor. He aquí un pequeño ejemplo.

 @Override public void onSaveInstanceState(Bundle outState) { outState.putString("message", "This is my message to be reloaded"); super.onSaveInstanceState(outState); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { String message = savedInstanceState.getString("message"); Toast.makeText(this, message, Toast.LENGTH_LONG).show(); } } 

El mensaje guardado será brindado a la pantalla. Espero que esto ayude.

Una nota importante que todos los nuevos desarrolladores de Android deben saber es que cualquier información en Widgets (TextView, Botones, etc.) será persistida automáticamente por Android, siempre y cuando se les asigne un ID. Así que significa que la mayor parte del estado de la interfaz de usuario se cuida sin problema. Sólo cuando necesita almacenar otros datos esto se convierte en un problema.

Desde Documentos de Android :

El único trabajo requerido por usted es proporcionar un ID único (con el atributo android: id) para cada widget que desea guardar su estado. Si un widget no tiene un ID, entonces no puede guardar su estado

Una buena información: no es necesario comprobar 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 aRestoreInstanceState () sólo si hay un estado guardado para restaurar, por lo que no es necesario comprobar si el Bundle es nulo

Almacenar información:

 static final String PLAYER_SCORE = "playerScore"; static final String PLAYER_LEVEL = "playerLevel"; @Override public void onSaveInstanceState(Bundle savedInstanceState) { // Save the user's current game state savedInstanceState.putInt(PLAYER_SCORE, mCurrentScore); savedInstanceState.putInt(PLAYER_LEVEL, mCurrentLevel); // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } 

Si no desea restaurar la información en su método onCreate:

Estos son los ejemplos: Recrear una actividad

En lugar de restaurar el estado durante onCreate (), puede optar por implementar onRestoreInstanceState (), que el sistema llama después del método onStart (). El sistema llama aRestoreInstanceState () sólo si hay un estado guardado para restaurar, por lo que no es necesario comprobar si el Bundle es nulo

 public void onRestoreInstanceState(Bundle savedInstanceState) { // Always call the superclass so it can restore the view hierarchy super.onRestoreInstanceState(savedInstanceState); // Restore state members from saved instance mCurrentScore = savedInstanceState.getInt(PLAYER_SCORE); mCurrentLevel = savedInstanceState.getInt(PLAYER_LEVEL); } 

Básicamente onSaveInstanceState (Bundle outBundle) le dará un paquete. Cuando miras la clase Bundle, verás que puedes poner muchas cosas diferentes dentro de ella. En la próxima llamada de onCreate (), sólo obtendrá ese Bundle como argumento. A continuación, puede volver a leer sus valores y restaurar su actividad.

Digamos que usted tiene una actividad con un EditText. El usuario escribió un texto dentro de él. Después de que el sistema llama a su onSaveInstanceState (). Usted lee el texto del EditText y lo escribe en el Bundle a través de Bundle.putString ("edit_text_value", theValue).

Ahora onCreate se llama. 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 ponerlo en su EditText.

Esto es para información adicional.

Imagine este escenario

  1. Actividad de lanzamiento ActivityA.
  2. ActivityB lanza un nuevo ActivityPrime

     Intent intent = new Intent(getApplicationContext(), ActivityA.class); startActivity(intent); 
  3. ActivityAPrime no tiene ninguna relación con ActivityA.
    En este caso, el paquete en ActivityAPrime.onCreate () será nulo.

Si ActivityA y ActivityAPrime deben ser la misma actividad en lugar de diferentes actividades, ActivityB debe llamar a finish () que a startActivity ().

Si los datos no se savedInstanceState Desde savedInstanceState utilice el siguiente código.
El problema es url llamada no es completar completamente así, comprobar si los datos se carga entonces para mostrar el valor de instanceState.

 //suppose data is not Loaded to savedInstanceState at 1st swipe if (savedInstanceState == null && !mAlreadyLoaded){ mAlreadyLoaded = true; GetStoryData();//Url Call } else { if (listArray != null) { //Data Array From JsonArray(ListArray) System.out.println("LocalData " + listArray); view.findViewById(R.id.progressBar).setVisibility(View.GONE); }else{ GetStoryData();//Url Call } } 
  • Restauración de la vista SavedState lanza ClassNotFoundException al desmarcar la vista principal SavedState
  • Guardar el estado de un WebView y volver a cargar la posición
  • Guardar el estado de la actividad (no sólo algunas variables) en el cambio de orientación
  • Android: guarda un estado de instancia cuando se cierra la aplicación
  • Android - ¿Por qué usar onSaveInsanceState () para guardar un objeto de mapa de bits que no se llama?
  • ¿WebView saveState () preserva variables / entorno de JavaScript?
  • Guardar marcadores en Android google maps v2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.