Android 退出后如何保存复选框的状态?

Android 退出后如何保存复选框的状态?,android,checkbox,sharedpreferences,Android,Checkbox,Sharedpreferences,在我的应用程序中,一个界面有一些复选框,我希望在我退出界面后,这些复选框应该保持状态。因此,下次我输入它时可以显示我上次所做的事情。我使用了SharedPreferences来实现这一点 checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener(){ public void onCheckedChanged(CompoundButton arg0, boolean isChecked) { // TODO Auto-

在我的应用程序中,一个界面有一些复选框,我希望在我退出界面后,这些复选框应该保持状态。因此,下次我输入它时可以显示我上次所做的事情。我使用了
SharedPreferences
来实现这一点

checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
// TODO Auto-generated method stub
Editor editor = getSharedPreferences("syllabus", 0).edit();
editor.putBoolean("cbx1_ischecked", isChecked);
editor.commit();
}
    });
checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener(){
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
    // TODO Auto-generated method stub
    Editor editor = getSharedPreferences("syllabus", 0).edit();
    editor.putBoolean("cbx2_ischecked", isChecked);
    editor.commit();
    }

});
但它不起作用。当我返回此页面时,所有复选框显示“每个项目都未选中”的状态


如何实现我想要的功能?

在put date GetSharedReferences之后,您必须在onCreate中使用此数据初始化checkboz状态,如下所示

//一次创建

SharedPreferences settings = getSharedPreferences("syllabus", 0);
Boolean isChecked = settings.getBoolean("cbx1_ischecked", false);
checkbox1.setChecked(isChecked );

在put date GetSharedReferences之后,您必须在onCreate中使用此数据初始化checkboz状态,如下所示

//一次创建

SharedPreferences settings = getSharedPreferences("syllabus", 0);
Boolean isChecked = settings.getBoolean("cbx1_ischecked", false);
checkbox1.setChecked(isChecked );

您的值会保存到
SharedReferences
,但这并不意味着它们会自动恢复到相应的复选框中。您需要从
SharedReferences
中读取它们,并在活动开始时设置复选框,如@talhakosen所述


此外,您不需要每次更改SharedReference时都将值写入它们。当用户离开您的活动时,即在
onStop()
方法中存储它们就足够了。

您的值会保存到
SharedReferences
,但这并不意味着它们会自动恢复到相应的复选框中。您需要从
SharedReferences
中读取它们,并在活动开始时设置复选框,如@talhakosen所述


此外,您不需要每次更改SharedReference时都将值写入它们。当用户离开您的活动时,存储它们就足够了,即在
onStop()
方法中。

您必须访问cbx1\u进行检查并手动设置。您不能期望它自动检索cbx1_ischecked的值,您必须访问cbx1_ischecked并手动设置它们。您不能期望它自动检索cbx1_ischecked的值这看起来不错,但您应该使用settings.getBoolean(“cbx1_ischecked”,false);因为我认为0不会编译。这看起来不错,但您应该使用settings.getBoolean(“cbx1_ischecked”,false);因为我认为0不会编译。