java - 以编程方式更改首选项值后更新它们

标签 java android sharedpreferences updates

我有一个简单的 PreferenceActivity。
在我的 Activity 中,我使用存储在这些键中的值。
通过 getDefaultSharedPreferencesgetBoolean("somekey")

如果我现在更改与“somekey”相关的首选项,一切都会正常
getBoolean 返回正确的值。

但是如果我以编程方式将值“somekey”设置为另一个值,
通过 Preferences.Editor 设置 View 不会更新为新值! 像这样:

pref_edit.putBoolean("somekey", true);
pref_edit.commit();

如果“somekey”之前为真,我现在通过 getBoolean("somekey"); 获取值;
它是 true 就像我更改的那样,但首选项内的复选框错过了此更改。
为什么?我如何更新首选项 View ?

最佳答案

嗯,这是一个有效的问题,但这不是一个简单的问题 - 有些人说完成,另一些人则 say

setPreferenceScreen(null);
addPreferencesFromResource(R.xml.preferences);

为了避免此类措施以及它们在平板电脑等设备上造成的困惑,我最终所做的就是注册 SharedPreferences.OnSharedPreferenceChangeListener (使我的首选项 Activity 成为一个),当我检测到首选项发生更改以更新我的复选框时(如果其值与存储的首选项不一致 - 所以它没有手动更改,因为如果手动更改,我有一个 onClick 更改默认共享首选项)。确实很烦人。

关于java - 以编程方式更改首选项值后更新它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21171530/

相关文章:

java - 还剩一半时间时倒数计时器播放声音

android - Android 上 Google 登录的 403 响应

java - 如何在不使用类 InetAddress 或避免 10 分钟缓存时间的情况下获取 DNS 解析时间?

java - Android保存用户登录注销状态

android - java.lang.IllegalArgumentException : class android. database.sqlite.SQLiteDatabase 声明了多个名为 mLock 的 JSON 字段

Android 可以将共享首选项用于登录目的

java - 服务器返回 HTTP 响应代码 : 401

java - 使用 Java 8 构建 Gradle

java - 为什么Java找不到符号

java - Apache Camel : modify endpoint on redelivery