繁体   English   中英

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

[英]Changes on a string set in shared preferences not posted to 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

似乎唯一的方法是像您一样删除和添加设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM