如何在 ViewPager 中管理奥托注册方法
How to manage otto registration methods in ViewPager
我正在使用 otto 来传达服务和地图片段。在该服务中,位置提供者获取发送到地图片段的位置数据。它工作得很好,但我无法使用 ViewPager 管理奥托的注册和注销方法。这个问题既不是otto也不是ViewPager的问题。
如上所述,当服务收到位置数据时,它会发送到地图片段。为此,我必须 register/unregister 在其特定的生命周期事件中进行片段和服务。在这一点上,我面临着 ViewPager 性质的问题。默认情况下,ViewPager 首先加载 Home 和 Map 片段,如下所示
因此,
- 在地图片段中,otto register 方法被自动调用,无需从主页滑动到地图片段
- 在地图片段中,从该片段滑动到其他片段时不会调用 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
}
}
我正在使用 otto 来传达服务和地图片段。在该服务中,位置提供者获取发送到地图片段的位置数据。它工作得很好,但我无法使用 ViewPager 管理奥托的注册和注销方法。这个问题既不是otto也不是ViewPager的问题。
如上所述,当服务收到位置数据时,它会发送到地图片段。为此,我必须 register/unregister 在其特定的生命周期事件中进行片段和服务。在这一点上,我面临着 ViewPager 性质的问题。默认情况下,ViewPager 首先加载 Home 和 Map 片段,如下所示
因此,
- 在地图片段中,otto register 方法被自动调用,无需从主页滑动到地图片段
- 在地图片段中,从该片段滑动到其他片段时不会调用 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
}
}