到目前为止,我应用的PreferenceActivity中的“重置为默认值”按钮执行了类似的操作:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.commit();
这个工作正常,但最近我在PreferenceManager类中看到了setDefaultValues方法。函数末尾的注释表示我应该在清除首选项后调用此函数将它们设置回默认值。所以我想知道为什么文档告诉我如果一切都工作正常而没有调用它就调用这个方法?
在逻辑上似乎也没有必要。如果清除首选项,它将执行与应用程序第一次运行时相同的操作。它将使用首选项中的defaultValue属性来填充所有值。因此,调用这个额外的方法似乎是多余的。
有必要吗?
答案 0 :(得分:1)
通常,这个额外的调用是必要的,但在您的特定情况下,它基本上是多余的。
我可能错了,但您使用editor.clear()
的编辑器方法将所有首选项设置为null,而不是默认值。直到用户膨胀PreferenceActivity
,才会读取preferences.xml并设置默认值。
基本上,只有首选项设置为SetDefaultValues()
时,调用null
的工作才会将首选项设置为默认值。假设您有一个名为“Age”的首选项,默认值在xml中设置为“21”。假设用户从未夸大pref菜单,根据您查询首选项的方式,它可能会给您一个空响应。这就是为什么以prefs.getString("prefkey", "defaultvalue");
形式查询是一种很好的做法。在查询之前进行此调用(并传入true
)会将“Age”设置为默认值“21”。注意:一旦用户设置了首选项或使菜单膨胀,此调用就无效。
但是,由于您要从首选项活动中调用editor.clear()
,因此首选项将使用preferences.xml中的默认值自动重新填充,因此无需进行调用。但是,如果您通过其他活动拨打电话,则需要这样做,否则您的所有偏好都将为空。为了完整起见,我建议你将呼叫添加为腰带和吊带,这样,如果你决定将你的功能移出这个活动,你就不会想知道为什么你的所有偏好都是空的。在性能方面它不应该有任何影响。
此外,不相关,但您可以通过将示例中的最后3行替换为preferences.edit().clear().commit();
答案 1 :(得分:1)
请注意其中的说明,即使用true表示不会删除设定值并使用默认值重置。 为此,您需要先清除设定值然后调用 PreferenceManager.setDefaultValues 设置默认值。
我希望这会进一步明确。