保存开关按钮状态不起作用

Saving switch button state isn't working

我有一个开关按钮用于设置应用程序的声音打开和关闭,虽然它可以正常工作但是当我关闭应用程序然后再次打开它时..开关会自动变为false..!? 我试图通过共享首选项库 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 允许你这样做,因为它可以是 truefalsenullboolean 不同,后者可以是 truefalse.

这是代码

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 + "");

}

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()

试试这个

在 onCreate() 中初始化 Hawk

Hawk.init(context).build();

之后从 Hawk 获取声音值并将其设置为开关

boolean isSound = Hawk.get("some",false);
soundSwitch.setChecked(isSound);
soundSwitch.setSelected(isSound);

没有通过 if else

来检查布尔值
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 调用时获取检查状态。