android - 如何强制 SharedPreferences 保存?

标签 android xml sharedpreferences android-preferences

据我所知,在明确访问值之前,它们不会存储在 Android 的 SharedPreferences 中。也就是说,虽然它们在 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" />

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

最佳答案

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

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

如果最后一个参数是false,如果这个方法过去从未被调用过,这只会设置默认值。

关于android - 如何强制 SharedPreferences 保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708309/

相关文章:

安卓房间 : How to know if a primary key exists?

java - 在 Java 中解析 XML 文件中的文本值

java - 在编码期间从 XML 中抑制序言

android - 不能放双 SharedPreferences

android - Android 应用中每个 View 的单独首选项

android - 在多进程模式下使用 SharedPreferences

java - Realm :更改字段名称以进行迁移

java - Android:加载 fragment 时启动动画

android - Cordova 在当前模拟器窗口上模拟。不是新窗口

c# - 在 Sharepoint : ReadXml fails while WriteXml works flawlessly 上存储数据集