2014-11-13 64 views
0

我遇到了這個問題,花了相當多的時間來弄清楚這個問題,所以我分享了我的經驗。OnSharedPreferenceChangeListener沒有調用Integer首選項

我使用SharedPreferences偵聽器在BroadcastReceiver(坐在AlarmManager事件上,但對主題無關緊要)和我的Activity之間傳遞數據。以前我使用intent來達到同樣的目的,但想到一個想法(瘋狂?可能使用Handlers是一個更好的模式?)我想到了,可以通過SharedPreferences偵聽器來完成。

所以我在Activity中註冊OnSharedPreferenceChangeListener和BroadcastReceiver我只是在SharedPreferences上使用一個編輯器,在那裏放置一個值,然後在Activity中接收它。目前看起來很簡單。它的工作原理是,但是不適用於整數偏好。因此,舉例來說,如果我叫

pref.edit().putString("0").commit(); 

OnSharedPreferenceChangeListener被調用,但如果我用這個:

pref.edit().putInt(0).commit(); 

叫!

我想問題是SharedPreferences是爲Settings設計的,在Android中沒有SharedPreference類型的整數,我們無法爲EditTextPreference指定整數值。所以,由於這個原因或其他原因,OnSharedPreferenceChangeListener不會爲int類型的首選項調用。謹防!

嗯,現在我想我應該使用,而不是消息的處理程序....

回答

0

不要使用SharedPreferences聽衆活動之間交換數據,除了SettingsActivity。而是通過處理程序消息傳遞通知。

+0

我忘了說,在我與一個字符串的偏好,而不是整數一個結束這種特殊情況下,這是最短的修復 – Mixaz