2015-12-04 52 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在你的问题可能是总体思路从这个清楚。

相关问题