gpt4 book ai didi

java - 与 FragmentPagerAdapter 中的 fragment 正确交互

转载 作者:行者123 更新时间:2023-11-30 03:14:16 24 4
gpt4 key购买 nike

除了 ViewPager 之外,我还使用 FragmentPagerAdapter 进行 Activity ,在 3 个 fragment 之间进行分页。基于第一个 fragment 的输入(谷歌地图上的标记),我在用户切换到 fragment 2 或 3 时发出 API 请求,然后更新这些 fragment View 。

总体思路是,我在 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 中正确删除和重新添加 fragment 引用。

这工作得很好,但问题是当我在第二个或第三个 fragment 页面上旋转我的设备时。当我尝试调用 fragment 上的方法时(在 Activity 的 onPageSelected 中),它给了我一个 NullPointerException - 我猜是因为重新创建了 Activity ,当 onPageSelected 触发时这些 fragment 还没有被创建。

我认为更好的方法可能是想出一种方法,让 fragment 在可见时只进行 API 调用,而不是让 Activity 触发它(这可能更干净 - 减少与/from fragments 通常更好),但如有任何建议,我们将不胜感激。

最佳答案

OnSelect(page2) 当您执行 API 调用并获得 API 调用结果时,应该有一个回调来更新 API 为“OnSaveInstanceState”引用的对象。

如果你这样做,那么在我看来,这就是你从框架中得到的:

API返回结果

结果更新一个 fragment 该 fragment 通过对“OnSaveInstanceState”的任何调用进行处理

OnOrientationChange::条件是在 API 返回结果后发生 fragment 以反射(reflect) API 结果的状态保存

Activity 由于方向改变而重新创建 在 SavedInstanceState != null 上,它重新实例化来自状态的 fragment ,包括早期 api 调用的残余....

见接受answer here更多详细信息

关于java - 与 FragmentPagerAdapter 中的 fragment 正确交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20413856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com