我写了一个包含3个标签的应用。每个选项卡具有相同的列表视图,具有不同的数据源。我在tabhost活动中设置了SharedPreferences,但是我将onSharedPreferenceChangeListener方法放在listactivity中。当我更改首选项时,我的侦听器被调用并更新我的数据库。这一切都有效。但是,如果我更改选项卡1中的数据,它会调用我的监听器一次。如果我更改选项卡2的数据,则会调用它两次,如果我更改了选项卡3中的数据,则会调用它三次。知道它为什么会这样运作吗?我想我可以在listactivity中设置我的共享首选项,这可能会避免这个问题,但我很好奇为什么我的监听器被多次调用,如果它在不同的选项卡中。
brockoli
答案 0 :(得分:2)
你在onDestroy()中放置了unregisterOnSharedPreferenceChangeListener(),并且在所有活动重启时都没有调用它。
结论是,正确的方法是分别在onResume()和onPause()中放置registerOnSharedPreferenceChangeListener()和unregisterOnSharedPreferenceChangeListener()。