【问题标题】:Can't use SharedPreferences with some checkboxes不能将 SharedPreferences 与某些复选框一起使用
【发布时间】:2016-02-15 09:37:02
【问题描述】:

我有一个片段,它启动一个活动,其中我有各种复选框(Checkbox1、checkbox2 等)。 即使在我返回片段并重新开始活动后,我也需要保持勾选/取消勾选状态。

我试过这段代码,但它不起作用

        final CheckBox checkBox5 = (CheckBox) findViewById(R.id.checkBox2);
    checkBox5.setChecked(false);

    checkBox5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (checkBox5.isChecked()) {
                buttonSound.start();
            } else {
                buttonSound.start();
            }
            SharedPreferences pref5 = PreferenceManager.getDefaultSharedPreferences(.this);                SharedPreferences.Editor editor5 = pref5.edit();
            editor5.putBoolean("checkbox", checkBox5.isChecked());
            editor5.commit();
            if (pref5.getBoolean("checkbox", false) == true){
                checkBox5.setChecked(true);
            } else{
                checkBox5.setChecked(false);
            }
        }
    });

谁能告诉我我做错了什么?

活动在清单中声明,我只是想从这个活动返回到一个片段,并在从片段到这个活动时发现这些复选框被标记!

【问题讨论】:

    标签: android android-fragments checkbox sharedpreferences


    【解决方案1】:

    检查是否真的检查呢?:

        if (checkBox5.isChecked()) {
                    SharedPreferences pref5 = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                    SharedPreferences.Editor editor5 = pref5.edit();
                    editor5.putBoolean("checkbox", checkBox5.isChecked());
                    editor5.commit();
            } else {
               // Remove the SharedPreferences here if false
        }
    

    如果您通过editor5.putBoolean("checkbox", checkBox5.isChecked()); 并且没有检查它(因为 is not... 当前为 false),您将始终得到 FALSE

    编辑:另外,请...检查 onCreate/onCreateView/onResume 或 setOnCheckedChangeListener 之外的任何其他位置的布尔 SharedPreference 状态。

    【讨论】:

    • 我还要补充一句:这是什么?! if (checkBox5.isChecked()) { buttonSound.start(); } else { buttonSound.start(); }
    • 当用户选中和取消选中复选框时,他会播放声音,哈哈,我会发疯的
    • 所以...这已经足够了buttonSound.start(); 无需检查。 ;)
    • @MarcoDeRoni 我们做到了!
    • 我们该死的做到了!女士们先生们,我在此声明马里亚诺·佐尼利亚是一个纯粹的天才!非常方便和友善的人以及耐心和热情!他帮我解决了这些愚蠢的问题,他真是太棒了,说真的!
    猜你喜欢
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多