2011-09-29 32 views
1

我有一个首选项屏幕,它有一些互相关联的首选项。这意味着,如果我有pref xy,我有时需要y更改为x更改时的内容。实时更新偏好

我在做什么,此刻正在听首选项更改事件,并做到这一点:

SharedPreferences.Editor editor = prefs.edit(); 
editor.putString("y_pref", "somevalue"); 
editor.commit(); 

的问题是,真正看到我必须先关闭首选项屏幕,然后改变再次打开它,只有这样我才能看到新设置的首选项。

有没有办法改变首选项,以便更改可以马上看到,而无需重新加载首选项屏幕?

回答

4

尝试调用优先设置本身,而不是自行更新:

例如, EditTextPreferencesetText()。所以偏好本身也会更新它自己的价值。如果您自己进行更新,则首选项不会获取新值,因为它甚至不知道持久值已更改。

如果您有PreferenceFragment,您可以使用PreferenceFragment.findPreference()获取首选项。

如果您有PreferenceActivity,则可以使用PreferenceActivity.findPreference()获取首选项。

你调用与爱好钥匙您在设置XML文件中指定的,你会得到相应的首选项的一个实例。然后将其转换为CheckBoxPreference,EditTextPreference等(您在XML文件中设置的类型)。

+0

我会尝试,但我如何得到我需要的pref元素的实例? (即'ListPreference'或'CheckBoxPreference'等)thanx – MeLight

+0

我更新了我的答案。 – Knickedi

+0

很抱歉,但速度很慢。我试图搜索它,但没有发现关于如何从prefschange监听器类中获取prefs元素的实例。 – MeLight