据我所知,在明确访问值之前,它们不会存储在 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" />
知道为什么没有设置所有默认值吗?
最佳答案
您可以使用 PreferenceManager::setDefaultValues
。例如,在您的 Application::onCreate
方法中。
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
如果最后一个参数是false
,如果这个方法过去从未被调用过,这只会设置默认值。
关于android - 如何强制 SharedPreferences 保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708309/