我遇到过这个问题,花了很多时间来弄清楚这件事,所以我分享了我的经验。
我使用SharedPreferences监听器在BroadcastReceiver之间传递数据(坐在AlarmManager事件上,但对于主题并不重要)和我的Activity。以前我使用意图用于相同的目的,但是一个想法(疯狂?可能使用Handlers是一个更好的模式吗?)来到我的脑海,通过SharedPreferences监听器来做。
所以我在Activity OnSharedPreferenceChangeListener 中注册,在BroadcastReceiver中我只使用SharedPreferences上的编辑器,在那里放置一个值,然后在Activity中接收它。到目前为止看起来很平它有效,但不适用于整数偏好设置。所以,例如,如果我打电话
pref.edit().putString("0").commit();
调用 OnSharedPreferenceChangeListener ,但是如果我使用它:
pref.edit().putInt(0).commit();
不来电!
我想问题是SharedPreferences是为Settings设计的,Android中没有类型为integer的SharedPreference,我们无法为EditTextPreference指定整数值。因此,出于这个原因或其他原因,不为类型为int的Preferences调用OnSharedPreferenceChangeListener。小心!
嗯,现在我觉得我应该使用带有消息的处理程序....
答案 0 :(得分:1)
试试这个:Otto(https://github.com/square/otto),EventBus(https://github.com/greenrobot/EventBus),MicroBus(https://github.com/konmik/MicroBus)
答案 1 :(得分:0)
除了SettingsActivity之外,不要使用SharedPreferences侦听器在活动之间交换数据。通过处理程序消息传递通知。