Кнопка переключения не работает с SharedPreferences - PullRequest
0 голосов
/ 19 октября 2019

Я использую кнопку переключателя в своем приложении для включения / выключения музыки. Я использую SharedPreferences, чтобы сохранить последнее состояние моей кнопки переключателя. Но когда я выхожу из своего приложения и запускаюсь снова, это дает мне состояние "выключено" по умолчанию все время. Я хочу сохранить состояние выбора пользователя все время, даже когда они закрывают и снова запускают приложение. Вот мой код `открытый класс SettingsView расширяет 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();

            }
        }
    });
}

}

`

1 Ответ

0 голосов
/ 19 октября 2019

Вы сохраняете свое логическое состояние в общих настройках под ключом 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));
}
...