使用复选框和共享首选项设置Android

时间:2014-09-02 11:55:09

标签: android checkbox sharedpreferences

我有2项活动。 MainActivity和设置。在设置活动中,我有几个复选框。我想要布尔值,如果选中CheckBox,布尔值将为true,如果未选中则为false。 然后我会将该值用于MainActivity中的设置。我尝试了很多方法,但我不能让它发挥作用。 如何使用共享首选项保存布尔值,并保存按钮状态? 编辑:我尝试使用此代码,但它不起作用。

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 个答案:

答案 0 :(得分: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");
            }
        });
    }

希望这可以帮到你!

答案 1 :(得分:1)

使用整数存储布尔标志,其中整数中的每个位代表一个标志

因此,每个位都会有代表你想要的东西的标志:

属性1的位1的FLAG:0x01
属性2的位2的标记为:0x02

你就是这样构建的,

现在,如果有人检查了复选框1,您应该更新共享首选项整数标记,如

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

这将设置整数的第一位,告诉第一个复选框被选中 同样,您可以存储其他复选框首选项

在MainActivity中,如果您想知道checkBox 1是否已被选中,则可以执行此操作

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

现在如果取消选中复选框,说复选框1,你应该清除第一位,你可以这样做....     //这将取消第一位     MySharedPref.setCheckBoxFlags(MySharedPref.getCheckBoxFlags()& ~0x01)

基于来自共享首页的整数,您可以在设置页面中显示您的复选框,勾选或未勾选