【问题标题】:PreferenceManager.setDefaultValues readAgain parameter and new preferencesPreferenceManager.setDefaultValues readAgain 参数和新首选项
【发布时间】:2012-05-21 15:39:23
【问题描述】:

我使用PreferenceManager.setDefaultValues(context,R.xml.preferences,false) 在我的应用程序中设置首选项的默认值,我注意到如果我添加一个新首选项,那么我的PreferenceFragment 不会显示它的默认值,即使它在 preferences.xml..

中设置

这是因为我将 readAgain 指定为 false 吗?

我知道我可以简单地试试看,但我只是想确定 readAgain 是为此目的,即重新读取默认值而不是重新设置用户设置,但要设置新属性的默认值。如果这正是 readAgain 标志的目的,那么您能否给我一个理由,不要总是将 readAgain 设置为 true,因为它不会重置用户首选项?

【问题讨论】:

    标签: android sharedpreferences default-value android-preferences


    【解决方案1】:

    readagain 标志设置为true 将确保再次设置所有未设置的默认值。这就是摘要。

    设置readagain 将导致额外的开销,因为基本上这意味着代码将再次遍历整个SharedPreference 以检查它们。使用readAgain false,它所做的只是检查用作设置默认值的标记的文件(has_set_default_values.xml)是否存在。

    无论如何,它不会设置任何已经设置的值。

    【讨论】:

    • 我考虑了可能的开销...我的首选项少于 10 个,所以这应该不是问题。如果添加了新首选项并强制重新加载首选项,是否还有其他方法可以监控在那种情况下?例如,我能否了解应用程序在更新后首次启动的时间?也许我可以使用像 last_version_seen 这样的首选项,并在针对当前版本启动应用程序时检查它,并在 readAgain 设置为 true 的情况下触发首选项重新加载,对吗?
    • 参考ChangeLog的代码。该名称解释了该组代码的使用。但是,除此之外,您可以通过为此设置 DefaultSharedPreference 来单独实施首次运行检查。 ;-) .
    • @GianniCostanzi 离开 readagain 为真。如果它只有 10 个 prefs ,为什么还要麻烦更多的代码。这不是懒惰,只是为了 10-20 个首选项的目的而创建另一个首选项是不值得的。但是,如果您喜欢我向您展示的ChangeLog 库,那么在该文件中添加代码位cl.firstRun() 就在某处。 :-) 。否则就让它为真。
    • 谢谢!该参数的文档给我的印象是它将覆盖所有设置,但我对其进行了测试并确认您在此处描述的行为是正确的。
    猜你喜欢
    • 2014-12-18
    • 2019-07-22
    • 2013-05-18
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多