我在项目中使用了一些活动。其中一个是从 PpreferencesActivity 扩展而来的。我有一个复选框首选项和一个编辑文本首选项,我可以使用以下方法从所有其他活动中获取值:
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
pref = sharedPrefs.getString("edit_text_pref", "error");
但是当我打开我的应用程序时,值必须设置为默认值,因此我使用:
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit();
在我的主要活动中。一切都应该没问题,但是如果我尝试在从首选项菜单中设置首选项之前获取首选项,则会出现"错误",而不是我在xml首选项文件中设置的默认值。如果我评论getDefaultSharedPreferences
行,它工作正常,但显然当我打开应用程序时,我得到了旧的首选项。如何绕过此问题?
看看http://developer.android.com/reference/android/preference/PreferenceManager.html#setDefaultValues%28android.content.Context,%20int,%20boolean%29
你一定在这样的事情中使用这个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 传递给 true 来将其设置为默认值
类似的东西
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit();
PreferenceManager.setDefaultValues(this, R.xml.preference, true);
您正在接收默认值本身,即"错误",因为使用首选项时,当您获得任何首选项的值时,您需要指定一个值,如果之前未设置首选项,则需要返回该值。在您的情况下,由于您在此处将默认值设置为"错误"pref = sharedPrefs.getString("edit_text_pref", "error");
因此这就是您获得的默认值。
好吧,我认为"错误"是读取值时出错时使用的值,如果未设置值,则不会!!
谢谢,这应该是工作,我会尝试的