android - 初始化首选项

标签 android settings

Android 指南建议在 XML 文件中定义首选项,从那里,这些可以加载到 PreferenceActivity/PreferenceFragment 等以供用户查看和编辑。但在实际场景中,用户首先与其他 Activity 交互,然后(可能)与首选项 UI 交互。

如果启动 Activity 需要其中的一些首选项怎么办?它们尚未加载,因为偏好资源尚未膨胀。有没有办法预先访问 XML 文件中的首选项?

最佳答案

是的。当您第一次请求首选项时,您可以为其提供一个默认值。例如。如果您正在加载 Int 类型的首选项,那么您可以通过以下方式从 Activity 中执行此操作:

SharedPreferences defaultSettings = PreferenceManager.getDefaultSharedPreferences(this);
int preferenceValue = defaultSettings.getInt("PreferenceName", 7);

这会将您的 preferenceValue 加载为 7(此偏好尚未初始化)。这是假设在您的 XML 首选项文件中,您有键“PreferenceName”的首选项。如果您计划在 Preference Activity 运行之前在 Activity 中编辑此首选项,请确保您使用 SharedPreferenceEditor 提交您的更改:

// ... change to preferenceValue occurs prior to this code
SharedPreferences.Editor defaultEditor = defaultSettings.edit();
defaultEditor.putInt("PreferenceName", preferenceValue);
defaultEditor.commit();

不过,我们可能希望在硬编码中避免使用“PreferenceName”,而是将其用作 strings.xml 文件中的字符串。这样,当首选项尚未保存时,它既可以从初始代码中获取,也可以从首选项 XML 文件中获取。这意味着我们上面的代码会将字符串“PreferenceName”替换为如下内容:

getResources().getString(R.string.pref_name)

在您的 Preference XML 文件中,您可以通过以下方式引用 key :

android:key="@string/pref_name"
android:defaultValue="7"

这应该涵盖“预加载”首选项以及尝试将大部分应用程序设置保存在一个地方。在初始 Activity 发生之前是否创建/加载 XML 首选项方面可能确实存在重叠,但我尚未对此进行测试。

编辑:事实证明,您可以通过以下方法直接加载 XML 文件(使用其默认首选项),而不是使用上述代码:

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

有关此方法的更多信息可以在 PreferenceManager 的文档中找到:http://developer.android.com/reference/android/preference/PreferenceManager.html

关于android - 初始化首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12337070/

相关文章:

c# - 将另一个项目的设置添加到 app.config

Android读取手机代理设置

python - 我如何在 odoowitj Many2one 关系中创 build 置页面(类似于常规设置)

android - 无法在 Android 设备上运行 ionic 应用程序

android 6.0 版本结束通话的正确方法

android - 应用程序线程与服务线程

android - Google 登录服务器实现返回 401

android - 如何在 Android 中以编程方式打开/更改 Google Ads 选择退出设置?

python - 保留 key

java - Android 监听器是某种设计模式吗?