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); } }
- Fragmento de Android que no guarda el estado
- El fragmento se recrea en la prensa trasera de otro Fragmento
- Android Fragmento Back Stack
- Guardar y restaurar el estado de la interfaz de usuario del fragmento cuando se empuja y sale del backstack
- Estado de restauración después de que el proceso se destruye
- Cómo guardar el estado de la instancia del radiobutton seleccionado en el menú
- Guardar el estado de los fragmentos del cajón de navegación
- Guardar el estado cuando se pulsa el botón Atrás
- Guardar / Restaurar fragmentos de estado android
- ¿Cómo puedo guardar el estado de mi webview al cambiar la orientación usando un webviewfragment
- ¿Cómo guardar el estado de un Android CheckBox cuando los usuarios salen de la aplicación?
- FragmentManager.getFragment () NullPointerException
- OnSavedInstanceState vs. SharedPreferences
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
- Actividad de lanzamiento ActivityA.
-
ActivityB lanza un nuevo ActivityPrime
Intent intent = new Intent(getApplicationContext(), ActivityA.class); startActivity(intent);
-
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 } }
- Android Hello-World compilación error: Intellij no puede encontrar aapt
- Cómo mostrar programaticamente la vista siguiente en ViewPager?