不为Integer首选项调用OnSharedPreferenceChangeListener

时间:2014-11-13 16:19:31

标签: android sharedpreferences

我遇到过这个问题,花了很多时间来弄清楚这件事,所以我分享了我的经验。

我使用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。小心!

嗯,现在我觉得我应该使用带有消息的处理程序....

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

除了SettingsActivity之外,不要使用SharedPreferences侦听器在活动之间交换数据。通过处理程序消息传递通知。