Android 如果SharedReference字符串集已更改,则不会调用onPreferenceChanged
我的代码中有Android 如果SharedReference字符串集已更改,则不会调用onPreferenceChanged,android,Android,我的代码中有 String name = ... SharedPreferences prefs = ... Set<String> servers; // = new HashSet<String> (); SharedPreferences.Editor edit = prefs.edit (); servers = prefs.getStringSet ("serverlist", new HashSet<String> ()); servers.ad
String name = ...
SharedPreferences prefs = ...
Set<String> servers; // = new HashSet<String> ();
SharedPreferences.Editor edit = prefs.edit ();
servers = prefs.getStringSet ("serverlist", new HashSet<String> ());
servers.add (name);
edit.putStringSet ("serverlist", servers);
edit.apply ();
更改首选项时,将永远不会调用侦听器。只有在删除首选项、提交/应用它(必需)并再次存储它时,侦听器才会被调用:
edit.remove ("serverlist");
edit.apply ();
edit.putStringSet ("serverlist", servers);
edit.apply ();
简单属性(字符串、布尔值等)的更改会正确地通知侦听器
我做错什么了吗?或者-这是一个已知的问题吗?检查一下,我也会遇到同样的问题。它与弱引用无关。我有相同的监听器,当键引用除StringSet之外的任何内容时会调用它。上面的链接没有帮助。它们没有处理StringSet属性。到目前为止,我找到的唯一解决方案(解决方法)是删除共享首选项,应用更改并再次将(以前保存的)值设置为首选项。这会触发对onPreferenceChanged的调用。检查后,我也会遇到同样的情况。它与弱引用无关。我有相同的监听器,当键引用除StringSet之外的任何内容时会调用它。上面的链接没有帮助。它们没有处理StringSet属性。到目前为止,我找到的唯一解决方案(解决方法)是删除共享首选项,应用更改并再次将(以前保存的)值设置为首选项。这将触发对onPreferenceChanged的调用。
edit.remove ("serverlist");
edit.apply ();
edit.putStringSet ("serverlist", servers);
edit.apply ();