sha*_*yyx 6 android checkboxpreference
我只有一个PreferenceScreen
包含CheckBoxPreferences
(要选择的类别).我需要一个选项来检查/取消选中所有这些选项.我有以下代码来完成这项工作,但是有一个问题:屏幕上的复选框没有更新 - 我需要在视图上调用一些无效的东西.
这是我现在的代码:
private void checkAll() {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = settings.edit();
@SuppressWarnings("unchecked")
Map<String, Boolean> categories = (Map<String, Boolean>) settings.getAll();
for(String s : categories.keySet()) {
editor.putBoolean(s, true);
}
editor.commit();
}
private void uncheckAll() {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = settings.edit();
@SuppressWarnings("unchecked")
Map<String, Boolean> categories = (Map<String, Boolean>) settings.getAll();
for(String s : categories.keySet()) {
editor.putBoolean(s, false);
}
editor.commit();
this.restart();
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常但我需要以某种方式刷新视图以查看结果imediatelly(不仅仅是在关闭并重新启动设置活动之后).
谢谢大家的任何建议!
dmo*_*mon 14
那是因为你实际上并没有抓住偏好对象,只是实际值.在for循环中尝试这个:
boolean theValue = param;
for(String s : categories.keySet()) {
Preference pref = findPreference(s);
if (pref instanceof CheckBoxPreference) {
CheckBoxPreference check = (CheckBoxPreference)pref;
check.setChecked(theValue);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为你可以省略调用编辑器并提交,因为setChecked()会为你做这件事.
检查这个出来为好.