【发布时间】:2014-06-17 11:28:43
【问题描述】:
我在 SharedPreferences 及其侦听器中遇到了一种奇怪的行为。
我在我的应用程序中只使用了一个 SharedPreference 实例,我通过PreferenceManager.getDefaultSharedPreferences(this); 检索到
在我的 PreferenceFragment 中,我有一个按钮可以将首选项重置为默认值。这就是它的作用:
PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().clear().commit();
PreferenceManager.setDefaultValues(getActivity(), R.xml.settings, true);
我有几个这个 SharedPreference 的监听器。它们都可以完美地添加/修改我的密钥。但是他们永远不会在重置时被解雇。该文档没有具体说明这种情况,但指出:
onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
在更改、添加或删除共享首选项时调用。
对我来说,重置就是删除所有偏好,所以我希望它会发生回调。
为什么没有发生? 非常感谢!
【问题讨论】:
-
您是否要清除首选项值,这是单击重置按钮时想要的结果
-
我清除(= 删除所有)首选项值,然后从我的文件 R.xml.settings 加载默认值。但两者都不会触发
onSharedPreferenceChanged()回调。 -
我认为如果您清除 SP,侦听器也会被删除。没有关于 的文档,但也许在 clear() 之后,再次注册此侦听器。
-
@Dadou:我实际上并不了解您的上下文,但我可以建议一种解决方案,您可以在单击按钮时用旧值重写值..现在偏好值已更改..
-
@Opiatefuchs 我检查过:听众在清除前后收到修改,但不是清除本身。