android - SharedPreferences.getAll() 没有为假的首选项键。如何检索所有 key ?

标签 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() 应该:“从首选项中检索所有值。”但是,它似乎只获取具有 default=true 的键,除非用户稍后设置了首选项。

编辑:This is likely related to Android Bug: 6441 ,但没有提供获取所有 key 的解决方法。

最佳答案

您可以通过以下方式访问所有首选项(我用它来启用/禁用所有首选项):

    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
        } 
    }

关于android - SharedPreferences.getAll() 没有为假的首选项键。如何检索所有 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11365525/

相关文章:

Android:如何修复通知的递增 setNumber()?

android - 在sqlite android中创建用户定义的函数?

android - 相对布局 - android :layout_centerHorizontal ="true" AND android:gravity ="center_horizontal" showing unexpected results

android - 使用 kSOAP2 发送带有 int 数组的对象

android - GSON 在从共享 prefs 获取时将之前存储的 List 转换为 LinkedTreeMaps 的 ArrayList

android - 偏好项和明确 Intent

android - 带有可点击按钮的自定义 PreferenceScreen

java - 我如何处理从 SharedPreferences 中删除这些项目?

android - requestWindowFeature(Window.FEATURE_NO_TITLE);给出异常(exception)