保存开关按钮状态不起作用
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
允许你这样做,因为它可以是 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 + "");
}
在 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 调用时获取检查状态。
我有一个开关按钮用于设置应用程序的声音打开和关闭,虽然它可以正常工作但是当我关闭应用程序然后再次打开它时..开关会自动变为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
允许你这样做,因为它可以是 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 + "");
}
在 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 调用时获取检查状态。