Android CheckBoxPreference - 取消/检查所有首选项

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()会为你做这件事.

检查这个出来为好.