Android sharedPreferences设置默认值问题

时间:2013-11-08 10:37:58

标签: android android-preferences

我在我的项目中使用了一些活动。其中一个是从PreferenceActivity扩展而来的。 我有一个CheckBoxPreference和一个EditTextPreference,我可以使用以下方法获取所有其他活动的值:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
pref = sharedPrefs.getString("edit_text_pref", "error");

但是当我打开我的应用程序时,必须将值设置为默认值,因此我正在使用:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit(); 

在我的主要活动中。 一切都应该没问题,但是如果我尝试先从首选项菜单中设置首选项,我会得到“错误”,而不是我在xml首选项文件中设置的默认值。 如果我评论getDefaultSharedPreferences行,它可以正常工作,但很明显,当我打开应用程序时,我得到了旧的偏好。 我该如何绕过这个问题?

3 个答案:

答案 0 :(得分:4)

看一看 http://developer.android.com/reference/android/preference/PreferenceManager.html#setDefaultValues%28android.content.Context,%20int,%20boolean%29

Yout必须使用此setDefaultValues (Context context, int resId, boolean readAgain)之类的东西,比如

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

仔细查看参数中的注释部分。这是再次承认 参数

context共享偏好的上下文。

resId首选项XML文件的资源ID。

readAgain是否重新读取默认值。如果为false,则此方法仅在以前从未调用过此方法时(或者如果默认值共享首选项文件中的KEY_HAS_SET_DEFAULT_VALUES为false),则设置默认值。要尝试再次绕过此检查设置默认值,请将readAgain设置为true。

注意:这不会将首选项重置为默认值。对于该功能,使用getDefaultSharedPreferences(Context)并清除它,然后调用此方法并将此参数设置为true

所以我想在清除之后你需要通过将readAgain传递为真来将其设置为默认值

类似

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit();
 PreferenceManager.setDefaultValues(this, R.xml.preference, true);

答案 1 :(得分:2)

您正在接收默认值,即“错误”,因为使用“首选项”,当您获得任何首选项的值时,如果之前未设置首选项,则需要指定要返回的值。在您的情况下,因为您在此处pref = sharedPrefs.getString("edit_text_pref", "error");将默认值设置为“错误”,因此您将获得默认值。

答案 2 :(得分:0)

好吧,我认为“错误”是读取值时出错的值,而不是未设置值的错误!!

谢谢你应该工作,我要试试