java - 切换按钮不适用于 SharedPreferences

标签 java android togglebutton

我在应用程序中使用开关按钮来打开/关闭音乐。我正在使用 SharedPreferences 来保存切换按钮的最后状态。但是,当我退出应用程序并再次运行时,它始终默认为“关闭”状态。我想始终保存用户选择的状态,即使他们关闭并再次运行应用程序也是如此。这是我的代码`public class SettingsView extends AppCompatActivity {

private Switch musicSwitch;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    musicSwitch = findViewById(R.id.sLLmusicSwitch);
    SharedPreferences sharedPrefs = getSharedPreferences("save", MODE_PRIVATE);
    musicSwitch.setChecked(sharedPrefs.getBoolean("value", true));
    switchCheckListener();
}

private void switchCheckListener() {
    musicSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (musicSwitch.isChecked()) {
                // saving state of the switch button
                SharedPreferences.Editor editor = getSharedPreferences("save", MODE_PRIVATE).edit();
                editor.putBoolean("NameOfThingToSave", true);
                editor.apply();
                musicSwitch.setChecked(true);
                // turn on music
                Repository.getInstance().startMusic();
                Toast.makeText(getApplicationContext(), "Music on", Toast.LENGTH_SHORT).show();
            } else {
                // saving state of the switch button
                SharedPreferences.Editor editor = getSharedPreferences("save", MODE_PRIVATE).edit();
                editor.putBoolean("NameOfThingToSave", false);
                editor.apply();
                musicSwitch.setChecked(false);
                //turn off music
                Repository.getInstance().pauseMusic();
                Toast.makeText(getApplicationContext(), "Music off", Toast.LENGTH_SHORT).show();

            }
        }
    });
}

}

`

最佳答案

您将 boolean 状态保存到键 NameOfThingToSave 下的共享首选项,并在 onCreate 上使用键 value 检索它。

在onCreate中适当设置键值:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    musicSwitch = findViewById(R.id.sLLmusicSwitch);

    SharedPreferences sharedpreferences = getSharedPreferences("save",
            Context.MODE_PRIVATE);
    switchCheckListener();

    musicSwitch.setChecked(sharedpreferences.getBoolean("NameOfThingToSave", false));
}

关于java - 切换按钮不适用于 SharedPreferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464291/

相关文章:

wpf - 删除 ToggleButton 烦人的背景鼠标悬停样式

java - 无法在 Iceweasel 上运行 java 8u71

java - 如何将IntelliJ IDEA 2017.1.2连接到Postgresql

java - 如何删除 Firebase 数据库数组中的项目?

android - java.util.zip.ZipException : duplicate entry: org/apache/commons/codec/binary/Base64. 类

Android DOZE 模式 GCM 优先级

qt - 使用 Qt 实现切换按钮的最佳方式

java - 正确编写具有用于 View 绑定(bind)的属性的模型

android - 录制 + 播放问题(MediaRecorder + MediaPlayer)

Android - ToggleButton setChecked 和 setSelected 不工作