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

时间:2018-11-14 17:30:52

标签: sharedpreferences

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

1 个答案:

答案 0 :(得分:1)

我遇到了与您相同的问题,并且如果您使用相同的Set引用SharedPreferences,似乎无法检测到更改。

先前报告的一个相关错误: https://issuetracker.google.com/issues/36943216

似乎唯一的方法就是像您一样删除并添加集。