1

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

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

4

2 回答 2

3

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

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

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

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

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

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

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

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

于 2012-09-09T06:52:12.600 回答
0

如果你查看 SharedPreference API,你会看到这个

getString(字符串键,字符串 defValue)

因此,如果默认值不存在,您实际上可以定义它。

来源:http: //developer.android.com/reference/android/content/SharedPreferences.html

您还可以使用 XML 在 XML 中预定义默认值

android:defaultValue="某事"

于 2012-09-09T06:43:55.360 回答