2012-01-02 36 views
0

我有超過100個不同的複選框在6個活動,我想保存每個狀態,以便當我從一個活動切換到另一個時,它仍然被檢查。我真的必須創建100多個布爾值來分別保存每個複選框還是有更簡單的方法來保存和讀出狀態?我想過使用循環,但我不能真正想到一個聰明的方法來做到這一點。如果有人能幫上忙,那會很棒! 這是我的其中一個複選框的示例:它應該在框被彈出時向ArrayList對象添加一個字符串,並在框未被選中時刪除該字符串。它工作正常,但是當我離開例如。 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");} 
     }   
    }); 

回答

0

一個選項是使用Shared Preferences來保存每個複選框的選中狀態。

// 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); 

該方案的優點是這些設置將在應用程序重新啓動後存活下來。

+0

這工作正常,但仍然,當我去支持一個活動,我之前檢查複選框,綠色蜱不是那裏了。所以我認爲系統現在得到它,但我怎樣才能將它連接到視圖? – 2012-01-04 13:29:56

+0

@ C.Mandy假設您正確保存偏好設置,當您顯示活動時,您是否設置了其已選狀態?看到我編輯的帖子。 – 2012-01-04 13:44:46

0

如果複選框的數量是一樣的,保持一個布爾陣列

+0

不幸的不是。如果necesarry我會改變他們,但我想知道如果沒有一個更簡單的方法可以避免它... – 2012-01-02 19:02:23

0

您可以映射覆選框的ID到它的使用全局HashMap的狀態。然後,您將複選框子類化,根據需要覆蓋以將狀態保存/恢復到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(); 

從我的頭頂,我認爲這是最好的方法。