【问题标题】:OnSharedPreferenceChangeListener is not called for Integer preference整数首选项不调用 OnSharedPreferenceChangeListener
【发布时间】:2015-01-10 20:54:13
【问题描述】:

我也遇到过这个问题,花了相当多的时间才弄清楚,所以我分享一下我的经验。

我正在使用 SharedPreferences 侦听器在 BroadcastReceiver(位于 AlarmManager 事件上,但对主题无关紧要)和我的 Activity 之间传递数据。以前我将意图用于相同目的,但我想到了一个想法(疯狂?可能使用 Handlers 是更好的模式?),通过 SharedPreferences 侦听器来实现。

所以我在Activity OnSharedPreferenceChangeListener 中注册,在BroadcastReceiver 中我只是在SharedPreferences 上使用一个编辑器,在其中输入一个值,然后在Activity 中接收它。到目前为止看起来很普通。它可以工作,BUT 不适用于 integer 偏好。所以,例如,如果我打电话

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

OnSharedPreferenceChangeListener 被调用,但如果我使用这个:

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

没有被调用!

我想问题是SharedPreferences是为设置而设计的,Android中没有整数类型的SharedPreference,我们不能为EditTextPreference指定整数值。因此,出于这个原因或其他原因,不会为 int 类型的 Preferences 调用 OnSharedPreferenceChangeListener。当心!

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

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    【讨论】:

    • 投票这个答案以获得好的信息。虽然我会像往常一样使用 Handler ))
    【解决方案2】:

    请勿使用 SharedPreferences 侦听器在活动之间交换数据,SettingsActivity 除外。而是通过 Handler 消息传递通知。

    【讨论】:

    • 我忘了说,在这种特殊情况下,我以字符串首选项而不是整数 1 结尾,这是最短的修复方法
    猜你喜欢
    • 2019-12-07
    • 2018-09-05
    • 2023-03-30
    • 2014-02-09
    • 2014-02-10
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    相关资源
    最近更新 更多