我遇到类似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)
有什么建议吗?提前谢谢!
答案 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);
public static void setDefaultValues (Context context, int resId, boolean readAgain)
如果readAgain为false,则只会在以前从未调用此方法时设置默认值(或默认值共享首选项文件中的KEY_HAS_SET_DEFAULT_VALUES为false)。要尝试再次绕过此检查设置默认值,请将readAgain设置为true 注意:这不会将首选项重置为其默认值。
所以,我的理解是:
readAgain
为false
,则只会读取一次默认值
在第一次运行应用程序后。如果使用默认添加新属性
值为首选项,在卸载之前不会初始化
再次安装该应用程序。 readAgain
为true
,则会显示默认值
每次函数调用都会反复出现值。但是,它不会重置
默认值,如果它们已被设置或更改
应用