繁体   English   中英

如何保存没有额外变量的复选框状态?

[英]How to save the state of a checkbox without extra variables?

我在6个活动中有100多个不同的复选框,我想保存每个活动的状态,以便当我从一项活动切换到另一项活动时,它保持选中状态。 我真的必须创建100个以上的布尔值来分别保存每个复选框,还是有一种更简单的方法来保存和读出状态? 我想到了使用循环,但我真的想不出一种聪明的方法来做到这一点。 如果有人可以帮助,那就太好了! 这是我的复选框之一的示例:它应该在框被选中时向ArrayList对象添加一个String,而在未选中该框时删除String。 它工作正常,但是当我离开时。 Actvity1,进入Activity2并返回Acivity1以取消选中我的复选框之一,该字符串第二次添加到我的ArrayList中,而不是被删除。

    myBox1.setOnClickListener(new OnClickListener() {
        @Override

        public void onClick(View v) {
            if (myBox1.isChecked() == true)
                helperActivity.myStringArrayList.add("myString1");

            else {
        helperActivity.myStringArrayList.remove("myString1");}
        }           
    });

如果复选框的数量相同,则保留一个布尔数组

您可以使用全局HashMap将复选框的ID映射到其状态。 然后,您将Checkbox子类化,根据需要进行覆盖,以将状态保存/恢复到Map中,并改为在xml文件中使用您的类。 然后,您可以在应用启动时保存并还原地图,使用它来写入文件:

        file = context.openFileOutput("checkbox_state.prefs", Context.MODE_PRIVATE);
        objectOutputStream = new ObjectOutputStream(file);
        objectOutputStream.writeObject(myCheckboxesState);

这是从其中读到的:

        file = context.openFileInput("checkbox_state.prefs");
        objectInputStream = new ObjectInputStream(file);
        myCheckboxesState = (Map<Integer, Boolean>) objectInputStream.readObject();

从我的头顶上,我认为这是最好的方法。

一种选择是使用“ 共享首选项”保存每个复选框的选中状态。

// Access the default SharedPreferences
SharedPreferences preferences = 
  PreferenceManager.getDefaultSharedPreferences(this);

...

SharedPreferences.Editor editor = preferences.edit();
// Save the checked state
editor.putBoolean("myBox1", true);
editor.commit();

...

// Get and set the checked state
boolean myBox1State = preferences.getBoolean("myBox1", false);
myBox1.setChecked(myBox1State);

这种方案的优点是这些设置将在应用程序重启后继续存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM