我有一个简单的 PreferenceActivity。
在我的 Activity 中,我使用存储在这些键中的值。
通过 getDefaultSharedPreferences
和 getBoolean("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/