Сохранение состояния кнопки переключателя не работает

У меня есть кнопка переключателя для включения и выключения звука приложения, хотя он работает нормально, но когда я закрываю приложение, затем снова открываю его... переключатель становится 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()

Другие вопросы по тегам