【发布时间】:2013-12-06 09:36:30
【问题描述】:
除了 ViewPager 之外,我还在使用 FragmentPagerAdapter 进行活动,以在 3 个片段之间进行分页。根据来自第一个片段(谷歌地图上的标记)的输入,当用户切换到片段 2 或 3 时,我会发出 API 请求,然后更新这些片段视图。
总体思路是我在FragmentPagerAdapter内部管理一个SparseArray,然后为viewPager创建一个onPageChangeListener:
pager.setAdapter(pagerAdapter);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 1) {
SecondFragment fragment = (SecondFragment) pagerAdapter.getFragment(1);
fragment.update(currentMarker);
} else if (position == 2) {
ThirdFragment fragment = (ThirdFragment) pagerAdapter.getFragment(2);
fragment.update(currentMarker);
}
}
});
我还覆盖了 FragmentPagerAdapter 中的 instantiateItem 和 destroyItem,以在我的 sparseArray 中正确删除和重新添加片段引用。
这很好用,但问题是当我在第二个或第三个片段页面上旋转我的设备时。当尝试调用片段上的方法时(在活动的 onPageSelected 中),它给了我一个 NullPointerException - 我猜是因为重新创建了活动,当 onPageSelected 触发时还没有创建这些片段。
我认为更好的方法可能是想出一种方法,让片段在可见时进行 API 调用,而不是让活动触发它(这可能更简洁 - 与/from Fragments 通常更好),但任何建议都将不胜感激。
【问题讨论】: