【问题标题】:How to save state of CheckBox after exit?退出后如何保存复选框的状态?
【发布时间】:2012-11-26 08:04:14
【问题描述】:

在我的应用程序中,一个界面有一些复选框,我希望退出界面后,复选框应该保持状态。所以下次我进入它可以显示我上次所做的事情。我使用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();
    }

});

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

如何实现我想要的功能?

【问题讨论】:

  • 您必须访问 cbx1_ischecked 并手动设置它们。你不能指望它自动检索 cbx1_ischecked 的值

标签: android checkbox sharedpreferences


【解决方案1】:

在设置日期 getSharedPreferences 后,您必须在 onCreate 中使用此数据初始化您的 checkboz 状态,如下所示

// onCreate

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

【讨论】:

  • 这看起来不错,但您应该使用 settings.getBoolean("cbx1_ischecked", false);因为我认为 0 不会编译。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 2013-01-11
    • 1970-01-01
    • 2018-11-12
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    相关资源
    最近更新 更多