Android布尔首选项问题

时间:2010-10-06 02:09:02

标签: java android boolean preferences

我希望将复选框的状态保存到我的首选项中。

我在复选框上设置了一个监听器,如果选中它,我会执行一个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);

1 个答案:

答案 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”)。

祝你好运:)