【问题标题】:Is a call to PreferenceManager.setDefaultValues() necessary for clearing preferences?清除首选项是否需要调用 PreferenceManager.setDefaultValues()?
【发布时间】:2013-05-18 06:53:15
【问题描述】:

到目前为止,我的应用程序的 PreferenceActivity 中的“重置为默认值”按钮做了这样的事情:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.commit();

这一直很好,但最近我在 PreferenceManager 类中看到了setDefaultValues 方法。函数末尾的注释说我应该在清除首选项后调用此函数以将它们设置回默认值。所以我想知道为什么文档告诉我如果一切正常而不调用它就调用这个方法?

这在逻辑上似乎也没有必要。如果您清除首选项,它将执行与您的应用程序第一次运行时相同的操作。它将使用首选项中的 defaultValue 属性来填写所有值。所以调用这个额外的方法似乎是多余的。

那么有必要吗?

【问题讨论】:

    标签: android sharedpreferences android-preferences default-value preferenceactivity


    【解决方案1】:

    一般来说,这个额外的调用是必要的,但在你的特定情况下,它基本上是多余的。

    我可能是错的,但是您与editor.clear() 一起使用的编辑器方法将所有首选项设置为空,而不是它们的默认值。直到用户膨胀PreferenceActivity,才会读取preferences.xml 并设置默认值。

    基本上,调用SetDefaultValues() 所做的是将首选项设置为默认值仅当首选项设置为null。假设您有一个名为“Age”的首选项,默认值在您的 xml 中设置为“21”。假设用户从未夸大过首选项菜单,这取决于您查询首选项的方式,它可能会给您一个空响应。这就是为什么以prefs.getString("prefkey", "defaultvalue"); 形式进行查询是一种很好的做法。在查询之前进行此调用(并传入true)会将“Age”设置为默认值“21”。注意:一旦用户设置了偏好,或者扩展了菜单,这个调用就没有效果了。

    但是,由于您是从您的首选项活动中调用editor.clear() ,首选项会自动使用preferences.xml 中的默认值重新填充,因此无需进行调用。但是,如果您从其他活动中拨打电话,则需要这样做,否则您的所有偏好都将为空。为了完整起见,我建议您将调用添加为腰带和吊带,这样,如果您决定将您的功能移出此活动,您将不会想知道为什么您的所有偏好都为空。就性能而言,它不应该有任何影响。

    同样,不相关,但您可以通过将示例中的最后 3 行替换为 preferences.edit().clear().commit(); 来节省一些代码行

    【讨论】:

      【解决方案2】:

      请参阅注释,其中说使用 true 不会删除设置值并重置为默认值。 为此,您需要先清除设置值,然后调用 PreferenceManager.setDefaultValues 设置默认值。

      我希望这能进一步清除。

      【讨论】:

        猜你喜欢
        • 2014-12-18
        • 2012-05-21
        • 2019-07-22
        • 1970-01-01
        • 1970-01-01
        • 2020-11-28
        • 2013-01-08
        • 2020-08-31
        • 1970-01-01
        相关资源
        最近更新 更多