gpt4 book ai didi

android - onSharedPreferenceChanged() 从未在 clear() 之后调用

转载 作者:行者123 更新时间:2023-11-29 14:37:58 25 4
gpt4 key购买 nike

我遇到了 SharedPreferences 及其监听器的奇怪行为。我在我的应用程序中只使用一个 SharedPreference 实例,我使用 PreferenceManager.getDefaultSharedPreferences(this);

检索它

在我的 PreferenceFragment 中,我有一个按钮可以将首选项重置为默认值。这就是它的作用:

PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().clear().commit();
PreferenceManager.setDefaultValues(getActivity(), R.xml.settings, true);

对于这个 SharedPreference,我有几个监听器。它们都可以完美地添加/修改我的 key 。但是他们永远不会在重置时被解雇。该文档没有具体说明这种情况,但指出:

onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)

Called when a shared preference is changed, added, or removed.

对我来说,重置是删除所有首选项,所以我期待回调发生。

为什么没有发生?非常感谢!

最佳答案

这是一个功能,并没有很好地记录下来。这是基于阅读源代码的解释。

将共享首选项视为可以持久保存在大容量内存中的键值 Map。然后将 SharedPreferences.Editor 视为另一个 Map,它仅存储要应用于 apply()commit()< 的修改。删除存储为 null 值。 clear() 在编辑器中作为 bool 标志实现,设置后,目标共享首选项映射在应用更改之前被清除。

监听器是按每个键通知的。在清除之前,没有关于共享首选项映射中的键的信息。因此,您只会收到有关在编辑器中由键名指定的那些更改的通知。

它也可以用其他方式实现:在清除 map 之前,只需几行代码就可以在修改后的键中记录现有共享首选项的 keySet()

供引用:SharedPreferencesImpl source

关于android - onSharedPreferenceChanged() 从未在 clear() 之后调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24262595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com