[英]How to save the state of a checkbox without extra variables?
我在6個活動中有100多個不同的復選框,我想保存每個活動的狀態,以便當我從一項活動切換到另一項活動時,它保持選中狀態。 我真的必須創建100個以上的布爾值來分別保存每個復選框,還是有一種更簡單的方法來保存和讀出狀態? 我想到了使用循環,但我真的想不出一種聰明的方法來做到這一點。 如果有人可以幫助,那就太好了! 這是我的復選框之一的示例:它應該在框被選中時向ArrayList對象添加一個String,而在未選中該框時刪除String。 它工作正常,但是當我離開時。 Actvity1,進入Activity2並返回Acivity1以取消選中我的復選框之一,該字符串第二次添加到我的ArrayList中,而不是被刪除。
myBox1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (myBox1.isChecked() == true)
helperActivity.myStringArrayList.add("myString1");
else {
helperActivity.myStringArrayList.remove("myString1");}
}
});
如果復選框的數量相同,則保留一個布爾數組
您可以使用全局HashMap將復選框的ID映射到其狀態。 然后,您將Checkbox子類化,根據需要進行覆蓋,以將狀態保存/恢復到Map中,並改為在xml文件中使用您的類。 然后,您可以在應用啟動時保存並還原地圖,使用它來寫入文件:
file = context.openFileOutput("checkbox_state.prefs", Context.MODE_PRIVATE);
objectOutputStream = new ObjectOutputStream(file);
objectOutputStream.writeObject(myCheckboxesState);
這是從其中讀到的:
file = context.openFileInput("checkbox_state.prefs");
objectInputStream = new ObjectInputStream(file);
myCheckboxesState = (Map<Integer, Boolean>) objectInputStream.readObject();
從我的頭頂上,我認為這是最好的方法。
一種選擇是使用“ 共享首選項”保存每個復選框的選中狀態。
// Access the default SharedPreferences
SharedPreferences preferences =
PreferenceManager.getDefaultSharedPreferences(this);
...
SharedPreferences.Editor editor = preferences.edit();
// Save the checked state
editor.putBoolean("myBox1", true);
editor.commit();
...
// Get and set the checked state
boolean myBox1State = preferences.getBoolean("myBox1", false);
myBox1.setChecked(myBox1State);
這種方案的優點是這些設置將在應用程序重啟后繼續存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.