2015-06-29 49 views
0

我知道有很多關於使用保存實例狀態的文檔,但我對如何爲我的情況實現它感到困惑。我使用自定義按鈕爲自己的活動定製了自定義操作欄,可將您帶到上一頁和下一頁。當我通過這些按鈕進行導航時,我希望能夠保存所有複選框的狀態。我90%確定我做錯了,我想知道考慮到我使用的線路數量是否有更好的方法。此代碼是我的第一個活動,當我點擊我的自定義下一個按鈕,然後前面的按鈕,返回到它,它不是節能狀態:使用saveinstancestate保存很多複選框狀態

boolean bPrearrival_1, bPrearrival_2, bPrearrival_3, bPrearrival_4, bPrearrival_5, 
     bPrearrival_6, bPrearrival_7, bPrearrival_8, bPrearrival_9, bPrearrival_10, 
     bPrearrival_11, bPrearrival_12; 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putBoolean("prearrival_1", checkboxList.get(0).isChecked()); 
    savedInstanceState.putBoolean("prearrival_2", checkboxList.get(1).isChecked()); 
    savedInstanceState.putBoolean("prearrival_3", checkboxList.get(2).isChecked()); 
    savedInstanceState.putBoolean("prearrival_4", checkboxList.get(3).isChecked()); 
    savedInstanceState.putBoolean("prearrival_5", checkboxList.get(4).isChecked()); 
    savedInstanceState.putBoolean("prearrival_6", checkboxList.get(5).isChecked()); 
    savedInstanceState.putBoolean("prearrival_7", checkboxList.get(6).isChecked()); 
    savedInstanceState.putBoolean("prearrival_8", checkboxList.get(7).isChecked()); 
    savedInstanceState.putBoolean("prearrival_9", checkboxList.get(8).isChecked()); 
    savedInstanceState.putBoolean("prearrival_10", checkboxList.get(9).isChecked()); 
    savedInstanceState.putBoolean("prearrival_11", checkboxList.get(10).isChecked()); 
    savedInstanceState.putBoolean("prearrival_12", checkboxList.get(11).isChecked()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    bPrearrival_1 = savedInstanceState.getBoolean("prearrival_1"); 
    bPrearrival_2 = savedInstanceState.getBoolean("prearrival_2"); 
    bPrearrival_3 = savedInstanceState.getBoolean("prearrival_3"); 
    bPrearrival_4 = savedInstanceState.getBoolean("prearrival_4"); 
    bPrearrival_5 = savedInstanceState.getBoolean("prearrival_5"); 
    bPrearrival_6 = savedInstanceState.getBoolean("prearrival_6"); 
    bPrearrival_7 = savedInstanceState.getBoolean("prearrival_7"); 
    bPrearrival_8 = savedInstanceState.getBoolean("prearrival_8"); 
    bPrearrival_9 = savedInstanceState.getBoolean("prearrival_9"); 
    bPrearrival_10 = savedInstanceState.getBoolean("prearrival_10"); 
    bPrearrival_11 = savedInstanceState.getBoolean("prearrival_11"); 
    bPrearrival_12 = savedInstanceState.getBoolean("prearrival_12"); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    checkboxList.get(0).setChecked(bPrearrival_1); 
    checkboxList.get(1).setChecked(bPrearrival_2); 
    checkboxList.get(2).setChecked(bPrearrival_3); 
    checkboxList.get(3).setChecked(bPrearrival_4); 
    checkboxList.get(4).setChecked(bPrearrival_5); 
    checkboxList.get(5).setChecked(bPrearrival_6); 
    checkboxList.get(6).setChecked(bPrearrival_7); 
    checkboxList.get(7).setChecked(bPrearrival_8); 
    checkboxList.get(8).setChecked(bPrearrival_9); 
    checkboxList.get(9).setChecked(bPrearrival_10); 
    checkboxList.get(10).setChecked(bPrearrival_11); 
    checkboxList.get(11).setChecked(bPrearrival_12); 

} 
+1

savedInstanceState不是SharedPreference。 –

+0

@hegazy Oops hm,好像我的意思是使用savedInstanceState而不是SharedPreference來編寫。我也不太瞭解,你知道什麼是解決我的問題的最好方法嗎? – Brejuro

回答

1

對於更少的代碼我會用

void saveChecListStateInPreference(){ 

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
String PREARRIVAL_PREFIX = "prearrival_"; 
String checkValue = ""; 
SharedPreferences.Editor editor = preferences.edit(); 

//Total length of your checkboxes 
for(int i = 0 ; i< 11 ; i++){ 
    checkValue = PREARRIVAL_PREFIX + String.valueOf(i+1);//Because it is no zero based where you started 
    preferences.putBoolean(checkValue,checkboxList.get(i).isChecked()) 
} 
editor.apply(); 

}

而且你可以以幾乎相同的方式恢復

+0

感謝您的回覆,是否有一個原因putBoolean提供一個錯誤,它無法解決?我還會在哪裏調用這個方法? – Brejuro

+0

你可以在onPause()或onStop()上調用它,但要小心不要存儲到很多值,因爲它在UI線程上運行,這裏是一個如何使用它的例子[SharePreferenrece Example](https:// github的.com/imjarp/101AndroidExamples /斑點/主/ 23-PreferencesManager /應用/ SRC /主/ JAVA/COM /示例/ jarp/sharedpreferences/MainActivity.java) – JARP