我希望将复选框的状态保存到我的首选项中。
我在复选框上设置了一个监听器,如果选中它,我会执行一个prefs.putBoolean(“cbstatus”,true),它是未选中的,我执行prefs.putBoolean(“cbstatus”,false); < / p>
麻烦的是,在我的onStart()中,当我得到prefs时,我的布尔值getcbstatus = prefs.getBoolean(“cbstatus”,false);无论我的听众如何设置此状态,都将始终返回true。
我做错了什么?我有工作prefs用于其他东西,如微调,文本视图和编辑文本,但最简单的类型(布尔值)应该给我带来困难。
我甚至尝试取出与此复选框相关的所有与侦听器和pref设置相关的代码,以便处理该复选框的整个活动中唯一的代码在行中
Boolean getcbstat = prefs.getBoolean("cbon", false);
if (getcbstat = true) {
cb1.setChecked(true);
}
else {
cb1.setChecked(false);
format.setVisibility(View.VISIBLE);
}
由于没有cbon首选项(我将它们全部删除),默认情况下它应该返回false,因此应该取消选中该框。当然,cb1是我的复选框的名称。
有什么想法吗?
代码更新:
OnClickListener cb = new OnClickListener() {
public void onClick(View v) {
if (cb1.isChecked()) {
prefs.putBoolean("cbon", true);
}
else {
prefs.putBoolean("cbon", false);
}
}
};
在onStart()中:
Boolean getcbstat = prefs.getBoolean("cbon", false);
cb1.setChecked(getcbstat);
答案 0 :(得分:2)
您在if语句中意外地将其指定为true。
将其更改为此
if (getcbstat == true)
[编辑 - 如何使用共享首选项(而不是Java的首选项类)] 如何使用SharedPreferences:
private SharedPreferences mPref;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
mPref = getSharedPreferences("my_prefs_file", MODE_PRIVATE);
//Other onCreate code goes here...
}
//Example of where you might want to save preferences
@Override
protected void onPause() {
super.onPause();
Editor prefEdit = pref.edit();
prefEdit.putBoolean("cbon", true);
prefEdit.commit();
}
以后需要阅读时:
//Example of where you might want to save preferences
@Override
protected void onResume() {
super.onResume();
boolean getcbstat = pref.getBoolean("cbon", false);
}
在preCreate部分中创建pref变量类级别并获取首选项对象可能是个好主意。将“my_prefs_file”更改为您喜欢的任何内容,但请记住,您将使用该字符串从应用程序中访问该特定的首选项集。我还建议使用常量而不是原始字符串作为访问键(如“cbon”)。
祝你好运:)