1

据我所知,值在SharedPreferences被显式访问之前不会存储在 Android 中。也就是说,虽然它们在 XML 中可能具有默认值,但在SharedPreferences调用访问器方法之前不会将值放在存储中,这就是所有访问器都包含“默认”参数的原因。

虽然这对于简单地从首选项存储中提取值并不是什么大问题,但它可以防止任何尝试获取应用程序中使用的所有首选项键,即使它们存储在 XML 中。SharedPreferences#getAll()除非已显式访问首选项,否则在调用时不会出现键。

有没有办法强制将 XML 中定义的所有首选项保存到SharedPreferences商店中?我能找到的最接近的解决方案是手动解析 Preference XML 文件,找到所有键和默认值,并为每个键保存默认值。有更清洁的方法吗?

更新

在更深入地研究了这个之后,出于不同的原因,我得到了部分偏好列表。设置默认值时,仅保存EditTextPreferenceListPreference值。另外两个,一个自定义首选项和一个CheckBoxPreference,完全被忽略了。这是一个被忽略的示例CheckBoxPreference

<CheckBoxPreference
    android:defaultValue="false"
    android:key="PREF_NAME"
    android:summary="Summary text"
    android:title="Title" />

知道为什么不设置所有默认值吗?

4

2 回答 2

2

您可以使用PreferenceManager::setDefaultValues. 例如,在你的Application::onCreate方法。

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

如果最后一个参数是false,则仅在过去从未调用过此方法时才设置默认值。

于 2012-05-22T19:00:49.787 回答
0

在我的情况下缺少首选项的原因实际上是一个Android 错误。解决方法是手动将缺少的首选项设置为其默认值,如重复问题所示:Android CheckBoxPreference Default Value

于 2012-05-22T20:28:50.397 回答