Android指南建议在XML文件中定义首选项,然后可以在PreferenceActivity
/ PreferenceFragment
等中加载这些首选项,以供用户查看和编辑。但在实际情况中,用户首先与其他活动交互,然后(可能)与首选项UI交互。
如果首发活动需要其中一些偏好,该怎么办?他们还没有加载,因为偏好资源尚未膨胀。有没有办法预先访问XML文件中的首选项?
答案 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中预定义默认值机器人:默认值= “东西”