初始化首选项

时间:2012-09-09 06:40:20

标签: android settings

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

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

2 个答案:

答案 0 :(得分:3)

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

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

这会将您的preferenceValue加载为7(尚未初始化此偏好)。这假设在您的XML首选项文件中,您具有键“PreferenceName”的首选项。如果您计划在运行“首选项”活动之前在活动中编辑此首选项,请确保使用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"

这应包括“预加载”首选项以及尝试将大多数应用程序设置保留在一个位置。在初始活动发生之前是否创建/加载了XML首选项可能确实存在重叠,但我还没有测试过。

编辑:结果不是使用上面的代码,您可以通过以下方法直接加载XML文件(具有默认首选项):

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

有关此方法的更多信息,请参阅PreferenceManager的文档:http://developer.android.com/reference/android/preference/PreferenceManager.html

答案 1 :(得分:0)

如果你看一下SharedPreference API,你会看到这个

getString(String key,String defValue)

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

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

您还可以使用

在XML中预定义默认值

机器人:默认值= “东西”