【问题标题】:Why is my onSharedPreferenceChangeListener being called multiple times when I change a pref为什么当我更改首选项时我的 onSharedPreferenceChangeListener 会被多次调用
【发布时间】:2023-03-30 16:55:01
【问题描述】:

我编写了一个带有 3 个标签的应用。每个选项卡都有相同的列表视图和不同的数据源。我在 tabhost 活动中设置了 SharedPreferences,但我将我的 onSharedPreferenceChangeListener 方法放在了我的 listactivity 中。当我更改首选项时,我的侦听器会被调用并更新我的数据库。这一切都在工作。但是,如果我更改选项卡 1 中的数据,它会调用我的侦听器一次。如果我更改选项卡 2 的数据,它会调用两次,如果我更改选项卡 3 中的数据,它会调用三次。知道为什么它会这样工作吗?我想我可以在我的 listactivity 中设置我的共享首选项,这可能会避免这个问题,但我很好奇为什么我的监听器在不同的选项卡中会被多次调用。

西兰花

【问题讨论】:

  • 经过更多测试后,似乎如果您对所有 3 个选项卡重复使用相同的活动,它将为每个选项卡调用一次 onSharedPreferenceChangeListener,直到您正在查看的选项卡。因此,如果我正在查看选项卡 3 并且我更改了一些首选项。它调用我的 onSharedPreferenceChangeListener 3 次。非常令人沮丧。我怎样才能让它只调用一次?
  • 事实证明,即使您在 listactivity 中设置了 sharedprefs,如果您没有查看第一个选项卡,它仍然会被多次调用。

标签: android listactivity android-tabhost sharedpreferences


【解决方案1】:

您已将 unregisterOnSharedPreferenceChangeListener() 放在 onDestroy() 中,并且不会在所有活动重新启动时调用它。

结论是,正确的做法是将 registerOnSharedPreferenceChangeListener() 和 unregisterOnSharedPreferenceChangeListener() 分别放在 onResume() 和 onPause() 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    相关资源
    最近更新 更多