如果我更新一个设置为共享首选项的字符串,我不会得到对注册的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(。
我遇到了和您相同的问题,如果您使用相同的Set引用SharedPreferences,似乎无法检测到更改。
先前报告的相关错误:https://issuetracker.google.com/issues/36943216
似乎唯一的办法就是像你一样删除和添加背景。