2

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

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

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

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

那么有必要吗?

4

2 回答 2

1

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

我希望这能进一步清除。

于 2013-07-06T08:44:18.133 回答
1

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

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

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

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

此外,不相关,但您可以通过将示例中的最后 3 行替换为preferences.edit().clear().commit();

于 2013-05-23T13:35:23.997 回答