选中/取消选中所有首选项?

时间:2012-06-03 00:07:32

标签: android sharedpreferences checkboxpreference

我试图通过向用户提供"全选"来改善应用的用户友好性。和"取消选择所有"首选项中的选项。除了一个主要缺陷外,事情似乎正在起作用: 我使用SharedPreferences.getAll()来检索所有复选框,以便我可以迭代它们并检查/取消选中它们。但似乎getAll()并没有完全符合它的名字。它不会返回所有首选项,而只返回之前已被用户更改过的首选项。

那么,有没有办法检索所有偏好?

我目前正在使用的代码:

public class ADRpreferences extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.xml.preferences);

    ((Preference) findPreference("searchresult_select_all")).
        setOnPreferenceClickListener(new OnPreferenceClickListener() {
             public boolean onPreferenceClick(Preference preference) {
                 setCheckState("searchresult", true);
                 return true;
             }
    });        


    ((Preference) findPreference("searchresult_deselect_all")).
    setOnPreferenceClickListener(new OnPreferenceClickListener() {
         public boolean onPreferenceClick(Preference preference) {
             setCheckState("searchresult", false);
             return true;
         }
    });        
}


private void setCheckState(String prefix, 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( s.startsWith(prefix) && (pref instanceof CheckBoxPreference) ){             
            ((CheckBoxPreference) pref).setChecked(state);
        }
    }

}
}

修改

好的,现在我将使用MH的解决方案。我将复选框首选项的所有ID放入arrays.xml中,并将使用这些值迭代所有复选框(如果你想知道我为什么不对ID进行硬编码,则会有44个复选框#39; S)。工作得很好,当然将来我必须记得在我更改首选项时添加/删除数组中的ID。这是新的setCheckState():

private void setCheckState(String category, Boolean state) {
    String[] arr = null;

    if( category.equals("loadlist") ){
        arr = getResources().getStringArray(R.array.array_loadlist_checkboxes);
    }
    else if( category.equals("searchresult") ){
        arr = getResources().getStringArray(R.array.array_searchresult_checkboxes);
    }
    else{
        return;
    }

    for( String s : arr ){
        Preference pref = findPreference(s);
        if( pref instanceof CheckBoxPreference ){
            ((CheckBoxPreference) pref).setChecked(state);
        }
    }
}

0 个答案:

没有答案