【问题标题】:Why does the swtich return to the initial phase?为什么开关会回到初始阶段?
【发布时间】:2017-08-01 08:36:05
【问题描述】:

我创建了一个 swich 并将 布尔值 保存到 sharedPreferences,但是当我恢复活动时,开关返回 OFF 虽然我想保持它 ON 如果它被打开 ON 而如果它被打开 OFF 保持它 OFF >.

这是我的开关代码:

        buttonSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
            if(isChecked){
                switched = "ON";
                SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
                editor.putBoolean("SWTCH", buttonSwitch.isChecked());
                editor.commit();
            }else{
                switched = "OFF";
                SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
                editor.putBoolean("SWTCH", buttonSwitch.isChecked());
                editor.commit();
            }
        }
    });

这里是onCreate SharedPreferences:

    SharedPreferences sharedPrefs = getSharedPreferences("com.example.xyle", MODE_PRIVATE);
    buttonSwitch.setChecked(sharedPrefs.getBoolean("SWTCH", false));

【问题讨论】:

    标签: java android


    【解决方案1】:

    您正在访问一个完全不同的共享首选项实例。

    "com.example.xyle"
    

    和

    "com.example.xyz"
    

    请将它们更改为相等

    【讨论】:

    • 太棒了,我没有注意到那个错误是问题所在,在 9 分钟内接受您的回答。
    • @I.Mytyuk 没问题。您可以考虑使用默认共享首选项。而不是私人的,除非有特定的原因。此外,apply() 优于 commit() stackoverflow.com/a/12074219/940834
    • @I.Mytyuk,为避免这种情况尽量不要使用内联字符串,而是使用常量。
    • @VladMatvienko 是的,对私人偏好路线提出了很好的建议。尽可能减少重用字符串的拼写错误。
    • @VladMatvienko 我肯定会的,我只是 android 新手,所以我还有很多东西要学。
    【解决方案2】:

    对阅读和写作使用相同的偏好名称。

    您还可以将 onCheckedChanged 增强为:

            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                    switched = isChecked ? "ON":"OFF";
                    SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
                    editor.putBoolean("SWTCH", isChecked);
                    editor.commit();
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      相关资源
      最近更新 更多