据我所知,在明确访问这些值之前,不会将值存储在Android的SharedPreferences
中。也就是说,虽然它们可能具有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" />
知道为什么不设置所有默认值?
答案 0 :(得分:2)
您可以使用PreferenceManager::setDefaultValues
。例如,使用Application::onCreate
方法。
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
如果最后一个参数是false
,则只会在过去从未调用此方法时设置默认值。
答案 1 :(得分:0)
在我的案例中缺少偏好的原因实际上是Android bug。解决方法是手动将缺少的首选项设置为其默认值,如重复的问题所示:Android CheckBoxPreference Default Value