2014-09-02 18 views
2

我有2項活動。主要活動和設置。在設置活動中,我有幾個複選框。我想要有布爾值,如果選中CheckBox,布爾值將爲true,如果不選中false。 然後我會在MainActivity中使用該值進行設置。我嘗試了很多方法,但我無法使它工作。 如何使用共享首選項保存布爾值,並保存按鈕狀態? 編輯:我試過這個代碼,但它不起作用。使用複選框和共享Prefferences進行設置Android

final SharedPreferences customSharedPreference = getSharedPreferences("myCustomSharedPrefs", Activity.MODE_PRIVATE); 


     option1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, 
        boolean isChecked) { 
       if (isChecked == true) { 
        option1.setChecked(customSharedPreference.getBoolean("myCheckBoxPref", true));   
         SharedPreferences.Editor editor = customSharedPreference.edit(); 
         editor.putBoolean("checked",true); 
         editor.commit(); 


       } else { 
        option1.setChecked(customSharedPreference.getBoolean("myCheckBoxPref", true));    
         SharedPreferences.Editor editor = customSharedPreference.edit(); 
         editor.putBoolean("checked",false); 
         editor.commit(); 
       } 
      } 
     }); 

回答

2

嘗試這樣的:

public void putBooleanInPreferences(boolean isChecked,String key){ 
     SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean(key, isChecked); 
     editor.commit();   
    } 
    public boolean getBooleanFromPreferences(String key){ 
     SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE); 
     Boolean isChecked = sharedPreferences.getBoolean(key, false); 
     return isChecked;  
    } 

中的onCreate 和()

CheckBox checkBox = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     checkBox = (CheckBox) findViewById(R.id.my_check_box); 
     boolean isChecked = getBooleanFromPreferences("isChecked"); 
     Log.i("start",""+isChecked); 
     checkBox.setChecked(isChecked); 
     checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton view, boolean isChecked) { 
       Log.i("boolean",""+isChecked); 
       TestActivity.this.putBooleanInPreferences(isChecked,"isChecked"); 
      } 
     }); 
    } 

希望這可以幫助你!

+0

這個工作!謝謝。我會盡快接受你的回答,計時器現在不會讓我。 – user3094736 2014-09-02 12:08:19

1

存儲布爾標誌,使用整數,其中在整數時,每個位都表示一個標誌

所以,你將不得不在每一位代表soemthing標誌你想:

在第1位FLAG財產1:0×01
FLAG在第2位的屬性2:0×02

與您共建這樣,

現在,如果有人已經選中的複選框,你都應該更新共享prefe倫斯整數標誌像

MySharedPref.setCheckBoxFlags(MySharedPref.getCheckBoxFlags() | 0x01) 

這將設置你的整數的第一位,告訴第一複選框被選中 同樣可以存儲其他複選框喜好

在MainActivity如果你想知道,如果複選框1是覈對之後可以做到這一點

if ((MySharedPref.getCheckBoxFlags() & 0x01) > 0) // 1st is set, that means checkbox was checked 

現在,如果複選框選中了,說複選框1,您應該清除的第一位,你可以這樣做.... //這將取消設置的第一位 個MySharedPref.setCheckBoxFlags(MySharedPref.getCheckBoxFlags()&〜0×01)

基於從共享PREF整數,你可以展示你的複選框,在設置頁面中勾選或取消選中