繁体   English   中英

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

Changes on a string set in shared preferences not posted to onSharedPreferenceChanged

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

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

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

1 如何在共享首选项中存储字符串

我希望用户能够为其在textview中显示的字符串创建一个昵称。 该应用程序将通过服务将字符串提供给活动,并在textview中显示它。 然后,我希望用户能够对该字符串进行昵称,以便每次再次显示该字符串时,都会显示昵称而不是原始字符串。 我的问题是,我可以使用共享首选项来做到这一点吗? ...

3 Android中字符串的共享首选项

我正在尝试将字符串值的首选项设置为: 我正在使用setprefer()方法设置首选项,但是每次我开始活动时,它都会询问我已经存储在首选项中的名称。 不知何故,我无法在上面的代码中获取保存的prefereces。 请提出解决方案。 ...

5 无法从首选项(设置)中检索字符串

我的Android应用程序遇到了问题。 问题是由于某种原因,我无法从preferences.xml文件中检索ListPreference的字符串。 这是我尝试的代码: 每当到达第二条if / else语句时,便直接进入else语句。 我不知道为什么要这么做。 我已经搜索过SO和G ...

7 onSharedPreferenceChanged不更新首选项

因此,当更改首选项时,我尝试更新timers.java类中的值。 这是我的timers.java中的值 我在onCreate中调用了它,如果我更改了首选项,请返回2个屏幕到main.java,然后重新启动timers.java,更改将起作用,但是,如果我只是进入首选项,然后返回time ...

8 无法保存具有共享首选项的字符串

我有两个字符串要保存,我编写了如下代码 但是这两行似乎有问题: 我试过了 而且问题仍然存在 当我打开应用程序并调用loadpreferences时,该应用程序将强制关闭 logcat告诉我,这两行的错误是肯定的,因为这只是第一行,因为他没有得到第二行,但是它们 ...

9 将字符串的arraylist保存到共享首选项

将API的ArrayList保存到API级别8的SharedPreferences的最佳方法是什么? 我现在能想到的唯一方法是将所有字符串保存到一个用逗号分隔的字符串中并以这种方式保存。 但我不知道字符串是否有最大大小。 有一个更好的方法吗? ...

暂无
暂无

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

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