2015-12-04 50 views
0

如何在Android中保存複選框狀態。 條件:如果選中複選框,則單選按鈕必須爲雙拼,反之亦然。如何使用SharedPreferences在Android中保存狀態?

//More like an enable-disable button which should save 
    radioButtons states and then disable/enable them 

//RadioButtons states should be saved too 
//if radioeg1 was checked when checkbox was checked, its state should 
    be saved  

Eg. 
    // cb = (Checkbox) findViewById(...) 
//radioeg1 = (RadioButton) findViewById(...) 
//radioeg2 = (RadioButton) findViewById(...) 


if (cb.ischecked){ 

    //save cb state as checked 

    //radioeg1.setEnabled(false) must be saved 

    //radioeg2.setEnabled(false) must be saved 

    //change the RadioButtons textcolor to grey? //Optional but an added Bonus if possible 
    //if not possible using this way, maybe change a textview's color to grey? 
} 

回答

0

//在創建檢查複選框的狀態

布爾checkBoxState = getSharedPreferences(上下文).getBoolean( 「checkbox_state」,假); //改變 checkbox.setOnCheckedChangeListener時默認不勾選

if(checkBoxState){ 
    checkbox.setChecked(true); 
    radioeg1.setEnabled(false); 
    radioeg1.setEnabled(false); 
} 

//將複選框狀態(新CompoundButton.OnCheckedChangeListener(){

@Override 
    public void onCheckedChanged (CompoundButton buttonView,boolean isChecked){ 
    SharedPreferences.Editor editor = getSharedPreferences(context).edit(); 
    editor.apply(); 
    editor.putBoolean("checkbox_state", isChecked); 
    if (isChecked) { 
     radioeg1.setEnabled(false); 
     radioeg1.setEnabled(false); 
    } 
} 
}); 
+0

最好爲代碼提供解釋! – Sweeper

+0

我是新來的概念,你能提供一個解釋嗎?我需要用什麼來代替「背景」? –

+0

.this – user3250092

0

你可以這樣做(假設thisContext型或中Context的子類)將複選框狀態保存到SharedPreferences中

SharedPreferences.Editor editor = PreferenceManager.getSharedPreferences (this).edit(); 

This基本上得到一個SharedPreferences.Edit對象,它允許您編輯共享首選項。現在你可以存儲東西了!

editor.putBoolean ("checkbox state", <Your boolean value here>); 

現在你完成了!

嗯......雖然不是很......但你仍然需要做一些我經常忘記的事情! - apply正在改變!

editor.apply(); 

現在你真的

要從共享偏好得到的東西了,先得到一個共享偏好的對象:(!不是一個Editor

SharedPreferences prefs = PreferenceManager.getSharedPreferences (this); 

然後你只需調用getXXX方法:

boolean checkBoxState = prefs.getBoolean ("checkbox state", false); 

第一參數是關鍵。您使用的密鑰與您用於保存密鑰的密鑰相同,即"checkbox state"。第二個參數是當它找不到他們想要的密鑰時將返回的內容。

編輯:

糟糕!似乎我忘記了方法的名稱。它應該是getDefaultSharedPreferences而不是getSharedPreferences。我的錯!

您基本上檢查布爾變量checkBoxState以查看是否禁用單選按鈕。

if (checkBoxState) { 
    //If it is true, disable the radiobuttons 
    <Your radio button name>.setEnabled (false); 
} 
+0

如何鏈接單選按鈕狀態與複選框?我對這個概念很陌生,你能不能提供一些細節,比如我需要在onCreate()中放置哪些部分?我收到一個錯誤..非靜態方法getSharedPreferences()不能從靜態上下文中引用。 (你的第一個代碼)我把它放在onCreate()中。 –

+0

看到我編輯過的文章@HarshwardhanS然後在'onCreate'上做我所有的代碼都可以 – Sweeper

0
SharedPreferences file; 
private static int checkBox =1; 
private static int radiobutton=0; 
SharedPreferences.Editor editor; 

In your OnCreate() 
file = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
editor=file.edit(); 
if(file.getInt("checkBox",0)==0) 
    { 


     //disable radiobutton here; 


    } 

    if(file.getInt("radiobutton",1)==1) 
    { 


     //disable checkBox here; 


    } 

//你可以把各自否則也符合您需求的基礎上,你正在嘗試做

Cb = (CheckBox)findViewById(R.id.CheckBox); 
    Cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 

      editor.putInt("checkBox", 0); 


       editor.commit(); 
     } 
    } 
); 
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);   
    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      editor.putInt("radiobutton", 1); 


       editor.commit(); 
     } 
    }); 

如何實現Shared Preferences在你的問題可能是總體思路從這個清楚。

相關問題