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/