你的位置:首页 > 操作系统

[操作系统]多个viewpager可能产生的问题


由于Fragment的方便性,现在很多人开始大量使用Fragment。 今天使用时遇到各问题,记录下来并分享下。

 

使用Fragment都会用FragmentActivity ,特别是在用到ViewPager时。因为需要FramgmentManager,

而我这次有两个fragment中都用到了ViewPager。 其实也是开始的时候没考虑好。然后都使用的FragmentActivity的FramgmentManager去处理。  但是发现在第一个页面打开后,进入第二个页面,此时第二个页面上内容是空的,查看log,第二个页面的ViewPager 的子view的onCreatView 方法并没有调用,这是什么鬼。。

 

百度发现是PagerAdapter的instantiateItem 中使用tag从FramgmentManager中查询Fragment的,如果找到了,会直接使用之前的,而不会重新创建,

PagerAdapter的tag生成是根据你的pagerID 和 index 生成的。

 

说明什么呢?说明第一个页面中存在和第二个页面相同tag的Fragment 。也就是有两个fragment具有相同的父id,和index。

index有重复的很好理解,那么就是说明使用了相同的pagerID。

 

然后想起来当时直接复制的布局文件,所以id相同,改了id,问题迎刃而解。

这个问题在于俩个关键的地方:

1.使用了相同的FramgmentManager实例

2. ViewPager的id相同。

 

所以平时使用这种容器类的控件,尽量使id不同,否则就可能产生类似的问题。

 

参考 :http://www.trinea.cn/android/android-source-code-analysis/multi-viewpager-to-fragment-not-init/