Android 未为整数首选项调用OnSharedPreferenceChangeListener

Android 未为整数首选项调用OnSharedPreferenceChangeListener,android,sharedpreferences,Android,Sharedpreferences,我遇到了这个问题,花了相当多的时间来解决这个问题,所以我分享我的经验 我使用SharedReferences listener在BroadcastReceiver(位于AlarmManager事件上,但这与主题无关)和我的活动之间传递数据。以前我使用意图也是出于同样的目的,但我想到了一个想法(疯狂?可能使用处理程序是更好的模式?),通过SharedReferences侦听器来实现 因此,我在SharedPreferenceChangeListener上注册活动,在BroadcastReceive

我遇到了这个问题,花了相当多的时间来解决这个问题,所以我分享我的经验

我使用SharedReferences listener在BroadcastReceiver(位于AlarmManager事件上,但这与主题无关)和我的活动之间传递数据。以前我使用意图也是出于同样的目的,但我想到了一个想法(疯狂?可能使用处理程序是更好的模式?),通过SharedReferences侦听器来实现

因此,我在SharedPreferenceChangeListener上注册活动,在BroadcastReceiver中,我只是在SharedReferences上使用一个编辑器,在那里输入一个值,然后在活动中接收它。到目前为止看起来很简单。它可以工作,但不适用于整数首选项。例如,如果我打电话

pref.edit().putString("0").commit();
调用了OnSharedPreferenceChangeListener,但是如果我使用它:

pref.edit().putInt(0).commit();
它是而不是叫的

我想问题是SharedReference是为设置而设计的,Android中没有integer类型的SharedReference,我们不能为EditTextPreference指定整数值。因此,出于这个或其他原因,int类型的首选项不调用OnSharedPreferenceChangeListener。小心


嗯,现在我想我应该用一个处理消息的处理程序来代替….

不要使用SharedReferences侦听器在活动之间交换数据,除了设置活动。改为通过处理程序消息传递通知。

尝试以下方法:Otto()、EventBus()、MicroBus()

投票确认此答案是否正确。虽然我会像往常一样使用Handler),但我忘了说在这个特殊情况下,我以字符串首选项而不是整数1结束,这是最短的修复