Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果SharedReference字符串集已更改,则不会调用onPreferenceChanged_Android - Fatal编程技术网

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 ();