2013-04-28 17 views
5

ArrayListはクラスレベルで定義されています。 これらは私のsavedInstanceメソッドです:ArrayListをバンドルsavedInstanceStateに保存

@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"); 
} 

が、私は向きを変更したときに状態を復元するonRestoreInstanceState()を使用する場合は、まだ、ArrayListには

+1

http://stackoverflow.com/a/4967491/1001401 を使用しようとするからsavedInstanceState – nfirex

答えて

2

空白である、そのように、あなたのリストが保存された状態で更新onStart()後に呼び出さあなたのアダプターを定義した後。あなたの最善の選択肢はonRestoreInstanceState()と同じ方法でリストを復元することです。onCreate()アダプタを再定義するか、notifyDataSetChanged()に電話をかけることもできます。

3
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 
} 
0

のonCreate(バンドルsavedInstanceState)であなたのArrayListを取得してください

list.addAll(savedInstanceState.getStringArrayList("savedList")); 

代わり

list=savedInstanceState.getStringArrayList("savedList"); 
関連する問題