为什么我的onSharedPreferenceChangeListener被多次调用,当我更改一个首选项时
问题描述:
我已经用3个选项卡编写了一个应用程序。每个选项卡具有相同的列表视图和不同的数据源。我在tabhost活动中设置了SharedPreferences,但是我将onSharedPreferenceChangeListener方法放在了我的listactivity中。当我更改首选项时,我的侦听器被调用并更新我的数据库。这一切都工作。但是,如果我更改了选项卡1中的数据,它会调用我的侦听器一次。如果我更改标签2的数据,则会调用它两次,如果我更改标签3中的数据,则会调用它三次。任何想法为什么它以这种方式工作?我想我可以在我的列表活动中设置我的共享首选项,这可能会避免该问题,但我很好奇为什么我的监听器被多次调用,如果它在不同的选项卡中。为什么我的onSharedPreferenceChangeListener被多次调用,当我更改一个首选项时
brockoli
答
您放置unregisterOnSharedPreferenceChangeListener()中的onDestroy(),它不叫上的所有活动将重新启动。
结论是,正确的做法是分别在onResume()和onPause()中放置registerOnSharedPreferenceChangeListener()和unregisterOnSharedPreferenceChangeListener()。
经过一些更多的测试后,似乎如果您对所有3个选项卡重复使用相同的活动,它会针对每个选项卡调用您的onSharedPreferenceChangeListener一次,直到您正在查看的选项卡。所以,如果我正在查看标签3,并且我改变了一些前提。它调用我的onSharedPreferenceChangeListener 3次。非常令人沮丧。我怎样才能让它只调用一次? – brockoli 2010-05-31 18:37:57
即使您在listactivity中设置了您的sharedprefs,但如果您未查看第一个选项卡,仍会多次调用它。 – brockoli 2010-05-31 19:24:52