2014-11-13 29 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