Android首选项:不正确的默认值DESPITE“setDefaultValues”

时间:2011-09-28 11:08:26

标签: android preferences default-value

我遇到类似this的类似问题,所以我按照建议的解决方案进行了处理,并将这行代码添加到onCreate:

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

不幸的是问题仍然存在,如果用户没有更改设置,仍然是默认值(true)来自

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

使用

代替XML中的默认值。

建议将getBoolean()的default-value参数更改为null,但此代码会崩溃应用程序:

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

有什么建议吗?提前谢谢!

2 个答案:

答案 0 :(得分:5)

最后它有效!我真的花了很多时间和精力去寻找错误,一旦我在这里发帖,我就会一个人找到它~~谢谢你们帮我解决这个问题。

如果有任何人有此问题,解决方案如下:将getBoolean()的默认值从true更改为false,如下所示:

mPreferences.getBoolean(String.valueOf(day_of_week), true) - >不起作用,无论XML中发生什么都是如此

mPreferences.getBoolean(String.valueOf(day_of_week), false) - >有用!它是XML

中正确的默认值

我真的不明白这样做的逻辑,但现在它完美无缺。对我来说似乎有点像虫子。

答案 1 :(得分:3)

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

来自documentation

  

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

所以,我的理解是:

  • 如果readAgainfalse,则只会读取一次默认值 在第一次运行应用程序后。如果使用默认添加新属性 值为首选项,在卸载之前不会初始化 再次安装该应用程序。
  • 如果readAgaintrue,则会显示默认值 每次函数调用都会反复出现值。但是,它不会重置 默认值,如果它们已被设置或更改 应用