我是Android开发的新手,我想知道如何在用户重新打开应用程序时在本地保存复选框状态,并且复选框保持红色,黄色或绿色。我将代码放在一个片段中,每次打开应用程序时,它都是我设置的默认红色。我有自定义复选框,我将它们循环显示,当用户单击复选框时,它会保持选中状态,但会更改颜色。我已经研究了很多,我尝试过SharedPreferences,但它没有用,我需要知道用户点击复选框并查看它是红色,黄色还是绿色的逻辑。我所看到的是一个复选框只是被检查一次,并且它是保存状态,如果它被检查或不,但我有复选框被多次检查和每次更改颜色。这是我用于复选框的方法的代码:
public int checked(CheckBox checkBox, int count){
if (checkBox.isChecked()){
count++;
} else if (!checkBox.isChecked()){
checkBox.setChecked(true);
count++;
}
if (count == 1){
checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox);
}
if (count == 2){
checkBox.setButtonDrawable(R.drawable.custom_green_checkbox);
}
if (count > 2){
count = 0;
checkBox.setButtonDrawable(R.drawable.custom_red_checkbox);
}
return count;
}
检查时,这是复选框方法本身。
chkStart.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
countStart = checked(chkStart, countStart);
}
});
所以,我想知道是否有办法在checked方法中保存复选框状态,或者有其他方法来实现这一点。如果有人知道为复选框保存了状态并让它们保持一定的可绘性,并且被检查0,1或2次,我将非常感激。提前谢谢!
答案 0 :(得分:0)
实际上,即使app已关闭,SharedPreferences仍然是保持CheckBoxes状态的不错选择。只需保存正确的密钥:值duple使其正常工作:我将使用checkboxId作为键,并使用您用作值的计数变量。例如:
SharedPreferences mSharedPreferences = this.getSharedPreferences("preferences_key", Context.MODE_PRIVATE);
SharedPreferences.Editor editor;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
editor = mSharedPreferences.edit();
chkStart.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
countStart = checked(chkStart, countStart);
editor.putInt("checkStartId", countStart);
editor.apply();
}
});
}
@Override
protected void onResume() {
super.onResume();
int value = mSharedPreferences.getInt("checkStartId", 0) // 0 is the default value, in case there is not value saved
}
要在应用程序启动时设置CheckBox的状态(例如,在方法onResume()
上),请从SharedPreferences
获取特定复选框的计数值并设置正确的颜色。