[英]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.