Android中无法保存CheckBox的状态
我在做一个应用,其中一个界面有很多CheckBox,我想在退出界面之后可以保存CheckBox的状态,我用的SharedPreferrences保存的,代码入下: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();
}
});
====
但是当我离开这个界面再次回来之后,所有的CheckBox的状态又都会变为默认全部未选中的状态。这是为什么啊? --------------------编程问答-------------------- 加log,看看在退出界面时isChecked的值是true还是false。
在重新进来时,把cbx1_ischecked保存的值也打印出来看看就知道了,或者debug一下也可以。 --------------------编程问答-------------------- 离开这个界面再次回来之后,所有的CheckBox的状态又都会变为默认全部未选中的状态,这是肯定的,你回到这个界面还要读取SharedPreferrences啊,根据相应的值去setCheckbox的状态 --------------------编程问答-------------------- onCreate的时候对每个checkbox设置setChecked,根据你从sharedpreference中读取的值进行设置 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 在onCreate中读取sharedpreference中设置的值,根据这个值checkbox设置setChecked --------------------编程问答-------------------- 估计是没读取sharedpreference --------------------编程问答-------------------- 你要手动进入cbx1_ischecked然后进行设置,不然不会给你自动获取cbx1_ischecked值。
在getSharedPreferences放完数据后,要在oncreate中初始化checkboz数据的状态,代码如下:
/ onCreate--------------------编程问答-------------------- 试一下这个方法:
SharedPreferences settings = getSharedPreferences("syllabus", 0);
Boolean isChecked = settings.getBoolean("cbx1_ischecked", false);
checkbox1.setChecked(isChecked );
boolean check1,check2;
checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
// TODO Auto-generated method stub
check1=isChecked;
}
});
checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
// TODO Auto-generated method stub
check2=isChecked;
}
});
//store boolean only once when you leave the activity
Editor editor = getSharedPreferences("syllabus", 0).edit();
editor.putBoolean("cbx1_ischecked", check1);
editor.putBoolean("cbx2_ischecked", check2);
editor.commit();
In onCreate()
SharedPreferences prefs = getSharedPreferences("syllabus", 0);
checkbox1.setChecked(prefs.getBoolean("cbx1_ischecked" ,false));
checkbox2.setChecked(prefs.getBoolean("cbx2_ischecked" ,false));
补充:移动开发 , Android