Java 与碎片PageRadapter中的碎片正确交互
我使用FragmentPagerAdapter进行活动,除了一个ViewPager之外,我还可以在3个片段之间翻页。根据第一个片段(google地图上的标记)的输入,当用户切换到片段2或3时,我发出API请求,然后更新这些片段视图 总体思路是,我在FragmentPagerAdapter中管理SparseArray,然后为viewPager创建onPageChangeListener:Java 与碎片PageRadapter中的碎片正确交互,java,android,Java,Android,我使用FragmentPagerAdapter进行活动,除了一个ViewPager之外,我还可以在3个片段之间翻页。根据第一个片段(google地图上的标记)的输入,当用户切换到片段2或3时,我发出API请求,然后更新这些片段视图 总体思路是,我在FragmentPagerAdapter中管理SparseArray,然后为viewPager创建onPageChangeListener: pager.setAdapter(pagerAdapter); pager.setOnPageChangeLi
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中的InstanceItem和destroyItem,以便在我的sparseArray中正确删除和重新添加片段引用
这很有效,但问题是当我在第二或第三个片段页面上旋转设备时。在尝试调用片段(在活动的onPageSelected中)上的方法时,它会给我一个NullPointerException-我猜是因为活动被重新创建,当onPageSelected触发时,这些片段还没有被创建
我认为更好的方法可能是找到一种方法,让片段在可见时调用API,而不是让活动触发它(这可能更干净-与片段之间的通信更少通常更好),但是任何建议都将不胜感激。OnSelect(第2页)当您执行API调用并获得API调用结果时,应该有一个回调来更新API为“OnSaveInstanceState”引用的对象
如果你这样做,那么IMO,以下是你从框架中得到的:
API返回结果
结果更新了一个片段
该片段通过调用“OnSaveInstanceState”进行处理
OnOrientationChange::条件是它发生在API返回结果之后
片段与反映API结果的状态一起保存
由于方向更改,活动被重新创建
在SavedInstanceState上!=null它从状态中重新实例化片段,包括先前api调用的剩余部分
有关更多详细信息,请参见accepted on Select(第2页),当您执行API调用并获得API调用结果时,应该有一个回调来更新API为“OnSaveInstanceState”引用的对象
如果你这样做,那么IMO,以下是你从框架中得到的:
API返回结果
结果更新了一个片段
该片段通过调用“OnSaveInstanceState”进行处理
OnOrientationChange::条件是它发生在API返回结果之后
片段与反映API结果的状态一起保存
由于方向更改,活动被重新创建
在SavedInstanceState上!=null它从状态中重新实例化片段,包括先前api调用的剩余部分
更多详细信息,请参见“已接受”谢谢-我正在阅读onSaveInstanceState,这似乎是解决我问题的一个好方法。我试过之后会接受的。谢谢-我正在阅读onSaveInstanceState,看起来是解决我问题的好方法。我试过以后再接受。