如果我更新设置为共享首选项的字符串,则不会获得对已注册的onSharedPreferenceChanged方法的回调。 其他更新(非字符串集)将无法使用上述方法。
侦听器代码:
public class MyFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener
{
public void onCreatePreferences (Bundle bundle, String s)
{
...
SharedPreferences preferences = <preferences>;
preferences.registerOnSharedPreferenceChangeListener (this);
...
}
public void onSharedPreferenceChanged (SharedPreferences sharedPreferences, String key)
{
if (key.equals ("stringset-key"))
{
... code to execute ...
}
}
}
更新活动:
public class MyActivity extends AppCompatActivity
{
...
SharedPreferences preferences = <preferences>;
Set<String> values = preferences.getStringSet ("stringset-key", null);
values.add ("new string");
SharedPreferences.Editor pref = preferences.edit ();
pref.putStringSet ("stringset-key, values);
pref.commit ();
...
MyFragment用于MyActivity。
到目前为止,我找到的唯一可行的解决方案是在设置更新值之前删除项目(pref.remove + pref.commit)。
答案 0 :(得分:1)
我遇到了与您相同的问题,并且如果您使用相同的Set引用SharedPreferences,似乎无法检测到更改。
先前报告的一个相关错误: https://issuetracker.google.com/issues/36943216
似乎唯一的方法就是像您一样删除并添加集。