在做项目的时候遇到一个坑比的问题,那就是标题上说的 二次进入不显示数据。
先说一下我的项目思路,便于还原问题。
问题
我这个项目结构是 底部导航栏 没有使用ViewPager ,在第二个Item里面嵌套了Viewpager+fragment+tablelayout。问题出现在第一次可以正常显示数据, 点击底部导航菜单,切出第二个在切进来 ,里面嵌套的fragment 第一个和第二个就是空白。 没有任何数据。切换到第三个子fragment,在切换到第一个fragment 数据显示正常。
解题方案
方法一:- 在上网查资料的时候 说onCreateView 每次切换都会进入,所以要吧view 状态保存,我试了但是那个大神的博客写的云里雾里的,也没搞好。
代码片段
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if(mView != null){ ViewGroup parent = (ViewGroup) mView.getParent(); if (parent != null) { parent.removeView(mView); } return mView; } }参考地址:http://bbs.anzhuo.cn/thread-941984-1-1.html
方法二:
这里是另一位提供的解决方案,一共三个, 第一个我没有试,所以效果有待考证;第二个 和方案一类似,但是具体实现不会没看懂,所以归类到方案一吧。第三个 是要在fragmentpageradapter 里面重写destroyItem ,根据测试, 发现还是不行的。
- viewpager.setOffscreenPageLimit(num);num为你的tab数。
- 在onCreateView里面,判断Fragment是否已经添加了contentView(第一次加载时,可以将view保存下 来,再 次加载时,判断保存下来的view是否为null),如果保存的view为null,返回新的view ,否则,先将 保存的view从父view中移除,然后将该view返回出去
- 重写public void destroyItem(ViewGroup Container, int position, Object object),去掉super.destroyItem(container, position, object);
参考 :http://blog.csdn.net/wx1396530501/article/details/50953465
方案三:
该方案就是解决我的问题的方案。
该方案就是解决我的问题的方案。
该方案就是解决我的问题的方案。
原来问题是出在了初始化FragmentPageAdapter时,传入的FragmentManager对象。在这里不能直接传getFragmentManager(),因为这里传入的是父类的FragmentManager,而当传入getChildFragmentManager()时就正常显示了,这个问题就解决了。 原代码:adapter=new MyPagerAdapter(getFragmentManager());现在:adapter=new MyPagerAdapter(getChildFragmentManager());
参考 :http://blog.csdn.net/ht_android/article/details/46651459