Сохранение состояния кнопки переключателя не работает
У меня есть кнопка переключателя для включения и выключения звука приложения, хотя он работает нормально, но когда я закрываю приложение, затем снова открываю его... переключатель становится false
автоматически..!? Я пытался сохранить последнее состояние через библиотеку Shared Preference Hawk, но мне не ясно, как это сделать правильно.!?
Вот когда я пытался использовать Hawk
// ....
bool soundON = Hawk.get("sound"); // NPE !!!
if (soundON) {
soundSwitch.setChecked(true);
soundSwitch.setSelected(true);
} else {
soundSwitch.setChecked(false);
soundSwitch.setSelected(false);
}
soundSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
isSoundEnabled = true;
Hawk.put("sound", true);
} else {
isSoundEnabled = false;
}
Log.i("is checked sound", isChecked + "");
}});
ОБНОВЛЕНИЕ - Решение
Я использовал ответ @Shrikant, но с небольшим изменением.! я использовал Boolean
вместо boolean
так что я могу проверить null
значения, которые Boolean
позволяет сделать, так как это может быть true
или же false
или же null
В отличие от boolean
который может быть true
или же false
,
Вот код
Boolean isSound = Hawk.get("sound");
if (isSound == null) {
// I want the sound to be ON by default so I set it to true
soundSwitch.setChecked(true);
soundSwitch.setSelected(true);
} else {
soundSwitch.setChecked(isSound);
soundSwitch.setSelected(isSound);
Log.i("Sound State > ", isSound + "");
}
3 ответа
Попробуй это
В onCreate() init этот Hawk
Hawk.init(context).build();
после этого получите значение звука от Hawk и установите его для переключения
boolean isSound = Hawk.get("some",false);
soundSwitch.setChecked(isSound);
soundSwitch.setSelected(isSound);
там не проверять логическое значение, если еще
soundSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.i("is checked sound", isChecked + "");
Hawk.put("sound", isChecked);
}
});
Я использовал версию Hawk 2.0.1.
Вы должны сохранить состояние проверки во время вызова setOnCheckedChangeListener. И получить состояние проверки во время вызова onCreate.
В onCreate()
Метод, который вы должны проверить isSoundEnabled из общего предпочтения, если вы проверили его из локальной переменной.
попробуй это:
bool soundValue = Hawk.get("sound");
if (soundValue) {
soundSwitch.setChecked(true);
soundSwitch.setSelected(true);
} else {
soundSwitch.setChecked(false);
soundSwitch.setSelected(false);
}
вместо:
if (isSoundEnabled) {
soundSwitch.setChecked(true);
soundSwitch.setSelected(true);
} else {
soundSwitch.setChecked(false);
soundSwitch.setSelected(false);
}
в onCreate()