2011-09-29 51 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