Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与碎片PageRadapter中的碎片正确交互_Java_Android - Fatal编程技术网

Java 与碎片PageRadapter中的碎片正确交互

Java 与碎片PageRadapter中的碎片正确交互,java,android,Java,Android,我使用FragmentPagerAdapter进行活动,除了一个ViewPager之外,我还可以在3个片段之间翻页。根据第一个片段(google地图上的标记)的输入,当用户切换到片段2或3时,我发出API请求,然后更新这些片段视图 总体思路是,我在FragmentPagerAdapter中管理SparseArray,然后为viewPager创建onPageChangeListener: pager.setAdapter(pagerAdapter); pager.setOnPageChangeLi

我使用FragmentPagerAdapter进行活动,除了一个ViewPager之外,我还可以在3个片段之间翻页。根据第一个片段(google地图上的标记)的输入,当用户切换到片段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中的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,看起来是解决我问题的好方法。我试过以后再接受。