2011-09-28 92 views
6

我有一个像this类似的问题,所以我根据提出的解决方案进行,并加入这行代码的onCreate:Android的首选项:不正确的默认值,尽管“setDefaultValues”

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

不幸的是,问题仍然发生时,如果用户还没有从

mPreferences.getBoolean(String.valueOf(day_of_week), true)

改变了设置,仍然是默认值(真)代替所使用的DEF的XML的价值。

一个建议getBoolean()的默认值的参数更改为空,但是这个代码崩溃的应用程序:

mPreferences.getBoolean(String.valueOf(day_of_week), (Boolean) null) 

有什么建议?提前致谢!

+0

你在'settings.xml'中设置了'android:defaultValue =“default”'吗?这行应该添加到你的主要活动onCreate中,而不是你的设置。 – Knickedi

+0

不,我将android:defaultValue设置为“true”或“false”。 setDefaultValues()函数位于我的主Activity的onCreate中,而不是在设置 – JonEasy

+0

@JhonnyR,我只是浪费了几个小时跟踪它。我同意这是一个错误。人们应该修改这篇文章,以便在未来拯救像我这样的人。 – Brandyn

回答

5

最后它的工作原理!我真的花了很多时间和精力去寻找错误,只要我在这里发布,我一个人发现了它,谢谢你们帮助我。

如果说anyoneelse有这个问题,解决方法是这样的:从真正的变化getBoolean()默认值设置为false,像这样:

mPreferences.getBoolean(String.valueOf(day_of_week), true) - >不起作用,它始终是真实的,不管发生了什么在XML中

mPreferences.getBoolean(String.valueOf(day_of_week), false) - >它的工作原理!这是XML的正确默认值我真的不明白这样做的逻辑,但现在它完美地工作。看起来有点像我的错误。

+0

在未来,请务必留下答案为*答案*不修改的问题,请(我搬到这个适合你,你可以上Q的详细信息,查看编辑历史) –

3

setDefaultValues的第三个参数设置为true。所以, PreferenceManager.setDefaultValues(this, R.xml.settings, true);

documentation

public static void setDefaultValues (Context context, int resId, boolean readAgain)
如果readAgain是假的,这只会设置的默认值,如果这个方法从未在过去叫(或KEY_HAS_SET_DEFAULT_VALUES默认值共享首选项文件为false)。要尝试绕过此检查再次设置默认值,请将readAgain设置为true。
注意:这不会将首选项重置为默认值。

所以,我的理解是:

  • 如果readAgainfalse,它只会一次 应用程序第一次运行后读取默认值。如果您向首选项添加了默认值为 的新媒体资源,则在您卸载之前它不会被初始化,并且 会再次安装该应用。
  • 如果readAgaintrue,它会在每次函数调用时重复读取默认值 的值。但是,它不会将 值重置为默认值,如果它们已被 应用程序设置或更改。
+0

+1好一点,如果这最后的一丝不解决问题再没有什么:-D – Knickedi

+1

尝试已经太..没有改善,它仍然无法从XML – JonEasy

+0

@JhonnyR值是否有可能的是,这些“不正确”值已被保存为当前设置值?在这种情况下,这个方法不会用默认值覆盖它们。再次,根据文档:将'readAgain'设置为'true'不会将首选项重置为默认值。对于该功能,使用'getDefaultSharedPreferences(Context)'并清除它,然后调用此方法,并将此参数设置为'true'。将来,当您开始正确初始化默认值时,不需要清除。 – GrAnd