据我所知,值在SharedPreferences
被显式访问之前不会存储在 Android 中。也就是说,虽然它们在 XML 中可能具有默认值,但在SharedPreferences
调用访问器方法之前不会将值放在存储中,这就是所有访问器都包含“默认”参数的原因。
虽然这对于简单地从首选项存储中提取值并不是什么大问题,但它可以防止任何尝试获取应用程序中使用的所有首选项键,即使它们存储在 XML 中。SharedPreferences#getAll()
除非已显式访问首选项,否则在调用时不会出现键。
有没有办法强制将 XML 中定义的所有首选项保存到SharedPreferences
商店中?我能找到的最接近的解决方案是手动解析 Preference XML 文件,找到所有键和默认值,并为每个键保存默认值。有更清洁的方法吗?
更新
在更深入地研究了这个之后,出于不同的原因,我得到了部分偏好列表。设置默认值时,仅保存EditTextPreference
和ListPreference
值。另外两个,一个自定义首选项和一个CheckBoxPreference
,完全被忽略了。这是一个被忽略的示例CheckBoxPreference
:
<CheckBoxPreference
android:defaultValue="false"
android:key="PREF_NAME"
android:summary="Summary text"
android:title="Title" />
知道为什么不设置所有默认值吗?