对共享首选项中设置的字符串所做的更改未发布到onSharedPreferenceChanged



如果我更新一个设置为共享首选项的字符串,我不会得到对注册的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

似乎唯一的办法就是像你一样删除和添加背景。

相关内容

  • 没有找到相关文章

最新更新