Al momento de generar valores puedes necesitar guardar estos cuando el usuario por ejemplo rota el dispositivo.
Para este propósito Android te provee de dos métodos que debes sobreescribir en tu Activity onSaveInstanceState y onRestoreInstanceState
public void onSaveInstanceState(Bundle savedInstanceState) {}
public void onRestoreInstanceState(Bundle savedInstanceState) {}
Debes utilizar el Bundle que que recibes como parámetro en ambos métodos.
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save in savedInstanceState.
savedInstanceState.putStringArray(SPINNER_DATA, colors);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore state from the savedInstanceState.
if(savedInstanceState != null) {
colors = savedInstanceState.getStringArray(SPINNER_DATA);
addColors(colors);
}
Codigo completo de ejemplo para guardar el state de un Activity
Este ejemplo supone que al hacer clic en el botón se ejecuta la acción de crear cierta información, aqui será crear un array de colores, y cargarlo en el spinner.
Este array deseas conservarlo si el usuario rota la pantalla o cambia a otra aplicación y por ello utilizarás los métodos previstos onSaveInstanceState y onRestoreInstanceState.
public class MainActivity extends AppCompatActivity {
private static final String SPINNER_DATA = "SPINNER_DATA";
private Spinner spinner;
private String colors[] = new String[0];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = (Spinner) findViewById(R.id.spinner);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save in savedInstanceState.
savedInstanceState.putStringArray(SPINNER_DATA, colors);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore state from the savedInstanceState.
if(savedInstanceState != null) {
colors = savedInstanceState.getStringArray(SPINNER_DATA);
addColors(colors);
}
}
/**
* Click button
*/
public void doColors(View view) {
// super simple data for this example
colors = new String[]{"Red", "Blue", "White", "Yellow", "Black", "Green", "Purple", "Orange", "Grey"};
addColors(colors);
}
/**
* Add data to spinner
*/
private void addColors(String[] colorsToAdd) {
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, colorsToAdd);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);
}
}
..
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.gustavopeiretti.myapplication.MainActivity">
<Button
android:text="Click Me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="33dp"
android:id="@+id/button"
android:onClick="doColors"/>
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/button"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="69dp"
android:id="@+id/spinner" />
</RelativeLayout>
Descarga este código completo
Hi! If you find my posts helpful, please support me by inviting me for a coffee :)