Guardar ArrayList en el paquete savedInstanceState
El ArrayList se define en el nivel de clase. Estos son mis métodos savedInstance:
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putStringArrayList("savedList", list); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); list=savedInstanceState.getStringArrayList("savedList"); }
Pero aún así, cuando cambio la orientación ArrayList está en blanco
Cuando se utiliza onRestoreInstanceState()
para restaurar el estado, se llama después de onStart()
para actualizar su lista con el estado guardado después de definir el adaptador. Su mejor opción es restaurar la lista en onCreate()
la misma manera que lo hace en onRestoreInstanceState()
. También puede redefinir el adaptador o llamar a notifyDataSetChanged()
.
TextView textviewname; String textname; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //declare the ui like this textviewname = (TextView) findViewById(R.id.textviewid); if(savedInstanceState==null){ //the first time the activity was created //do the normal flow of the code //Example:getting the intent data for(savedList)or processing it Intent i = getIntent(); textname = i.getStringExtra("savetext"); //or textname="name_data"; }else{ //this is called when orientation change occur //get the savedata list=savedInstanceState.getStringArrayList("savedList"); textname=savedInstanceState.getString("savetext"); } textviewname.setText(textname); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //saving data when orientation change trigger //saving data before ondestroy happens //onSaveInstanceState is called before going to another activity or orientation change outState.putStringArrayList("savedList", list); outState.putString("savetext", textname); //all imnportant data saved and can be restored } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); //this is only called after ondestroy-> oncreate occur list=savedInstanceState.getStringArrayList("savedList"); textname=savedInstanceState.getString("savetext"); //oncreate->onSaveInstanceState->ondestroy->oncreate->onRestoreInstanceState }
tratar de usar
list.addAll(savedInstanceState.getStringArrayList("savedList"));
en lugar
list=savedInstanceState.getStringArrayList("savedList");