Fragment嵌套fragment二次进入 不显示数据

在做项目的时候遇到一个坑比的问题,那就是标题上说的 二次进入不显示数据。

先说一下我的项目思路,便于还原问题。

问题

我这个项目结构是 底部导航栏 没有使用ViewPager ,在第二个Item里面嵌套了Viewpager+fragment+tablelayout。问题出现在第一次可以正常显示数据, 点击底部导航菜单,切出第二个在切进来 ,里面嵌套的fragment 第一个和第二个就是空白。 没有任何数据。切换到第三个子fragment,在切换到第一个fragment 数据显示正常。

解题方案

方法一:
    1. 在上网查资料的时候 说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  ,根据测试, 发现还是不行的。
  1. viewpager.setOffscreenPageLimit(num);num为你的tab数。
  2. 在onCreateView里面,判断Fragment是否已经添加了contentView(第一次加载时,可以将view保存下 来,再 次加载时,判断保存下来的view是否为null),如果保存的view为null,返回新的view ,否则,先将 保存的view从父view中移除,然后将该view返回出去
  3.  重写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


 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值