我希望用户能够为其在textview中显示的字符串创建一个昵称。 该应用程序将通过服务将字符串提供给活动,并在textview中显示它。 然后,我希望用户能够对该字符串进行昵称,以便每次再次显示该字符串时,都会显示昵称而不是原始字符串。 我的问题是,我可以使用共享首选项来做到这一点吗? ...
提示:本站收集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)。
我遇到了与您相同的问题,似乎如果您使用相同的 Set 引用 SharedPreferences 不会检测到更改。
先前报告的相关错误: https : //issuetracker.google.com/issues/36943216
似乎唯一的方法是像您一样删除和添加设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.