【问题标题】:Using Checkbox and Shared Prefferences for settings Android使用复选框和共享首选项设置 Android
【发布时间】:2014-10-26 16:26:35
【问题描述】:

我有 2 项活动。 MainActivity 和设置。在设置活动中,我有几个复选框。我想要布尔值,如果选中 CheckBox,则布尔值将为真,如果未选中则为假。 然后我会将该值用于 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();
                }
            }
        });

【问题讨论】:

    标签: android checkbox sharedpreferences


    【解决方案1】:

    试试这样:

       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");
                }
            });
        }
    

    希望对您有所帮助!

    【讨论】:

    • 这成功了!谢谢。我会尽快接受你的回答,现在计时器不允许我这样做。
    【解决方案2】:

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

    所以你将在每个位上都有代表你想要的东西的标志:

    属性 1 的第 1 位标志:0x01
    属性 2 位 2 的标志:0x02

    而你就是这样构建的,

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

     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() & ~0x01)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多