多个ViewPager引发的Fragment未初始化

本文主要介绍ViewPager FragmentPagerAdapter中Fragment缓存的规则

可能需要在一个Activity中显示多个ViewPager,如GridView或ListView中以ViewPager做Item。
在Fragment的onCreateView函数中添加断点,结果发现只有第一个ViewPager的Fragment被初始化了

排查发现在FragmentPagerAdapter中的instantiateItem函数中FragmentManager以container的id加fragment的position为标记。导致第一个ViewPager的position初始化后进了缓存,第二个ViewPager的position1就直接从缓存中获取数据,查看FragmentPagerAdapter源码如下:


从上红圈标记的地方可以看出查找Fragment的规则,其中container.getId为ViewPager父View的id,position为fragment的位置。
针对上面的makeFragmentName规则,我们有两种解决方法:
1、自己复制FragmentPagerAdapter中的内容,重写一个PagerAdapter,修改其中的makeFragmentname规则,推荐使用此种方法。
2、改变上面container.getId,即ViewPager父View的idcontainerId。不过这种方式只是用于ViewPager较少的情况,否则复制很恶心的。。。

时间: 2024-10-31 16:54:23

多个ViewPager引发的Fragment未初始化的相关文章

oracle-OCI连接Oracle调用OCISessionBegin失败:ORA-24314: 未初始化服务句柄

问题描述 OCI连接Oracle调用OCISessionBegin失败:ORA-24314: 未初始化服务句柄 OCI连接Oracle数据库的时候,建立会话连接OCISessionBegin就失败:Error code为:ORA-24314: 未初始化服务句柄.而使用PL/SQL Developer连接Oracle就可以,进去PL/SQL Developer里面也可以执行SQL语句. 解决方案 小弟是小白,刚看C++如何操作Oracle,看网博上有那么一段代码就整下来试试,没什么经验,严重被打击

tabs-关于在Actionbar Tab和ViewPager里面的Fragment的问题

问题描述 关于在Actionbar Tab和ViewPager里面的Fragment的问题 在tablet Actionbar Tabs和 phone ViewPager中能使用一个Fragment吗? 看似手机使用支持库,与 Actionbar中的TabListener 不兼容. 有什么方法能共同使用相同的Fragment? 我查资料看到这个方法,也供大家参考. 解决方案 你需要在adapter中实现它们共同的接口,来处理tab的转换. public class TabsPagerAdapte

求大神解决!!android viewpager缓存,fragment动画

问题描述 求大神解决!!android viewpager缓存,fragment动画 我知道viewpager有缓存机制,但我不想要这种缓存,因为我的fragment中有动画,一缓存切换时效果就没出,怎么办??? 设置setOffscreenPageLimit(0)直接报错 是否有别的办法?让动画不缓存,只缓存数据? 解决方案 取消viewpager预加载,重写一个基类fragment,判断该fragment是否显示,没显示就不加载界面.你百度,我手机端写代码费时,百度viewpager取消预加

Android ViewPager内的fragment数据如何更新?

问题描述 Android ViewPager内的fragment数据如何更新? ViewPager有三页,每一页有一个fragment,fragment内的数据是从内部存储读取的,点击刷新后我需要fragment内的数据更新,然后ViewPager肯定也需要刷新.但是fragment里listview的adapter是活动创建时创建的,而后面点击刷新后执行adapter.notifyDataSetChanged();数据好像不能更新,该怎么解决啊! 解决方案 首先你要把数据写到每个fragmen

替换viewpager中的fragment的问题

问题描述 替换viewpager中的fragment的问题 ViewPager中有FragmentA和FragmentB,点击FragmentA中的按钮,把FragmentA替换成FragmentC.如何实现?? 解决方案 ViewPager+Fragment问题ViewPager+Fragment实现选项卡,并且完美解决刷新和替换Fragment的问题viewpager添加fragment问题 解决方案二: viewpager adapter 有一个参数Fragment 的集合 点击按钮操作这

android- java.lang.RuntimeException(已声明但未初始化的变量出错)

问题描述 java.lang.RuntimeException(已声明但未初始化的变量出错) 我的错误定位了,但是我不知道怎么改,请大神指点哈. 代码如下 switch (bundle.getInt(PushConsts.CMD_ACTION)) { case PushConsts.GET_CLIENTID: comm_frame.dev.client_id = bundle.getString("clientid"); <--这里 } 错误原因是comm_frame.dev.c

java-eclipse运行代码时,显示 “启动:未初始化小程序”

问题描述 eclipse运行代码时,显示 "启动:未初始化小程序" eclipse运行代码,窗口中显示"启动:未初始化小程序" ,代码如下,求解 /*弹球示例*/ package java自学; import acm.graphics.*; import acm.program.*; public class Chapter10_example extends GraphicsProgram{ /*设置弹球的直径*/ private static final int

viewpager中的fragment之间跳转传值问题?

问题描述 viewpager中的fragment之间跳转传值问题? 有一个是Activity,在里面有viewpager的实现,ViewPager显示的是10个子fragment,ViewPager中使用的是FragmentStatePagerAdapter适配器.现在已经可以左右滑动切换1-10个Fragment了,我现在想实现的功能是:每个Fragment中都有几个button,点击第一个Fragment中的button,相当于右滑了一下,跳到了下一个Fragment.能跳过去了,但是从第一

viewpager-Fragment+ViewPager滑动里面Fragment出现空白

问题描述 Fragment+ViewPager滑动里面Fragment出现空白 我是在一个Activity(也是从Fragment里跳出来的)里 用 ViewPager +Fragment, FragmentPagerAdapter里有三个 Fragment.我在滑动ViewPager的时候,第一次 滑动各个Fragment都会显示,第二次滑动的时候,只剩下第二个第三个Fragment出现空白,第一个一直 好好的.请问大侠们,这是为什么呢 解决方案 要么就是adapter中没控制好,要么就是fr