我的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();
}
此代码工作正常,但我需要以某种方式刷新视图以查看结果imediatelly(不仅仅是在关闭并重新启动设置活动之后)。
谢谢大家的任何建议!
答案 0 :(得分: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);
}
}
我认为您可以省略调用编辑器并提交,因为setChecked()将为您执行此操作。
同时检查this。
答案 1 :(得分:0)
现在我有了这个工作代码,也许它会帮助某人:
import ...
public class CategoriesActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.category_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.categories_check_all:
this.checkAll();
return true;
case R.id.categories_uncheck_all:
this.uncheckAll();
return true;
}
return false;
}
private void checkAll() {
this.setCheckState(true);
}
private void uncheckAll() {
this.setCheckState(false);
}
private void setCheckState(Boolean state) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
@SuppressWarnings("unchecked")
Map<String, Boolean> categories = (Map<String, Boolean>) settings.getAll();
for (String s : categories.keySet()) {
Preference pref = findPreference(s);
if (pref instanceof CheckBoxPreference) {
CheckBoxPreference check = (CheckBoxPreference) pref;
check.setChecked(state);
}
}
}
}