SharedPreferences.getAll()没有false的首选项键。如何检索所有密钥?

时间:2012-07-06 15:47:39

标签: android sharedpreferences android-preferences

只有带有android:defaultValue =“true”的CheckboxPreference键才会显示在下面的代码中。因此,没有显示defaultValue =“false”的键。 如何获取偏好文件中所有密钥的列表呢?

  PreferenceManager.setDefaultValues(this,R.xml.settings,true); //readAgain=false is same result
        SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);
        Map<String, ?> prefMap=prefs.getAll();
         for(String key:prefMap.keySet()) {
             Log.d("preference key=",key); //only keys with true are shown
         }
    }

根据文档,getAll()应该:“从首选项中检索所有值。”但是,它似乎只获取默认值为true的键,除非用户稍后设置了首选项。

编辑:This is likely related to Android Bug: 6441,但没有给我一个解决方法来获取所有密钥。

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容访问所有首选项(我使用它来启用/禁用所有首选项):

    final ListAdapter adapter = getPreferenceScreen().getRootAdapter();
    for (int i = 0; i < adapter.getCount(); i++) {
        Object object = adapter.getItem(i);
        if(object instanceof Preference){
            ((Preference)object).setEnabled(state);  // state -> my own variable
        } 
    }