如何在 ViewPager 中管理奥托注册方法

How to manage otto registration methods in ViewPager

我正在使用 otto 来传达服务和地图片段。在该服务中,位置提供者获取发送到地图片段的位置数据。它工作得很好,但我无法使用 ViewPager 管理奥托的注册和注销方法。这个问题既不是otto也不是ViewPager的问题。

如上所述,当服务收到位置数据时,它会发送到地图片段。为此,我必须 register/unregister 在其特定的生命周期事件中进行片段和服务。在这一点上,我面临着 ViewPager 性质的问题。默认情况下,ViewPager 首先加载 Home 和 Map 片段,如下所示

因此,

  1. 在地图片段中,otto register 方法被自动调用,无需从主页滑动到地图片段
  2. 在地图片段中,从该片段滑动到其他片段时不会调用 otto 取消注册方法

所以这种行为使我无法管理 otto 方法。 即使选择了 home 或 settings fragments,地图 fragment 仍然存在并从服务接收位置数据。我不要这个。

我在 github 和此处搜索了 otto 与 ViewPager 的用法,但没有任何问题或示例。稍微搜索一下 ViewPager 后,我发现有人建议 ViewPager.setOffscreenPageLimit(0)。 But it does not work

那么一起使用 ViewPager 和 otto 的正确方法是什么?

如果您只想在 MapFragment 可见时接收事件,那么您可以这样做:

public class MapFragment extends Fragment
    @Override
    public void setMenuVisibility(final boolean visible) {
        super.setMenuVisibility(visible);

        if (visible) {
            // register here
        } else {
            //unregister here
        }
}