安卓开发之详解getChildFragmentManager和getsupportFragmentManager和getFragmentManager详解

getFragmentManager()所得到的是所在fragment 的父容器的管理器,
getChildFragmentManager()所得到的是在fragment  里面子容器的管理器。

getSupportFragmentManager()主要用于支持 3.0以下android系统API版本,3.0以上系统可以直接调用getFragmentManager() ,因为fragment是3.0以后才出现的组件,为了这之前的系统版本也能使用fragment,借助V4包里面的getSupportFragmentManager()方法来间接获取FragmentManager()对象,3.0版本之后,有了Fragment的api,就可以直接使用getFragmentManager()这个方法来获取对象。

容易出现bug的地方

1.Fragment嵌套Fragment要用getChildFragmentManager

(1)问题重现

1>Fragment放ViewPager,ViewPager里面是fragment。第一次进入没问题,再次进入ViewPager的fragment时里面内容就没了,数据丢失

2>Fragment低频率点击切换不会发生问题,过快点击马上崩溃

3>错误:Java.lang.IllegalArgumentException:No
view found for id for fragment

3>调用fragment的replace方法不走onDestroy()、onDestroyView()方法,无法销毁fragment

4>在fragment中写倒计时,每次切换后倒计时越来越快的问题

(2)解决方案

FragmentManager childFragmentManager = getChildFragmentManager();
ViewPager_Adapter viewPager_adapter = new ViewPager_Adapter(childFragmentManager, fragments);    //FragmentPagerAdapte

getFragmentManager到的是activity对所包含fragment的Manager,而如果是fragment嵌套fragment,那么就需要利用getChildFragmentManager()了。

getFragmentManager()所得到的是所在fragment 的父容器的管理器,
getChildFragmentManager()所得到的是在fragment  里面子容器的管理器。
getSupportFragmentManager()主要用于支持 3.0以下android系统API版本,3.0以上系统可以直接调用getFragmentManager() ,因为fragment是3.0以后才出现的组件,为了这之前的系统版本也能使用fragment,借助V4包里面的getSupportFragmentManager()方法来间接获取FragmentManager()对象,3.0版本之后,有了Fragment的api,就可以直接使用getFragmentManager()这个方法来获取对象。

容易出现bug的地方

1.Fragment嵌套Fragment要用getChildFragmentManager

(1)问题重现

1>Fragment放ViewPager,ViewPager里面是fragment。第一次进入没问题,再次进入ViewPager的fragment时里面内容就没了,数据丢失

2>Fragment低频率点击切换不会发生问题,过快点击马上崩溃

3>错误:Java.lang.IllegalArgumentException:No
view found for id for fragment

3>调用fragment的replace方法不走onDestroy()、onDestroyView()方法,无法销毁fragment

4>在fragment中写倒计时,每次切换后倒计时越来越快的问题

(2)解决方案

FragmentManager childFragmentManager = getChildFragmentManager();
ViewPager_Adapter viewPager_adapter = new ViewPager_Adapter(childFragmentManager, fragments);    //FragmentPagerAdapte

getFragmentManager到的是activity对所包含fragment的Manager,而如果是fragment嵌套fragment,那么就需要利用getChildFragmentManager()了。

原文链接:链接大神》》》http://blog.csdn.net/allan_bst/article/details/64920076

最新文章

  1. PHP 语言特性
  2. [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)
  3. ie9及以下不兼容event.target.dataset对象
  4. linux下生成rsa密钥的方法
  5. springday05-go1
  6. LA 4329 (树状数组) Ping pong
  7. poj 1818 ATP
  8. Review1-11
  9. 为OLED屏增加GUI支持
  10. final对于访问效率的影响
  11. WebGL学习(3) - 3D模型
  12. 查看 FormData 中已存在的值
  13. redis 简单的注册
  14. docker技术之安装
  15. MongoDB学习目录
  16. LintCode: Triangle
  17. mysql优化连接数
  18. 处理Git不能上传大于100M文件问题
  19. selenium测试(Java)-- 隐式等待(十)
  20. Web—12-详解CSS的相对定位和绝对定位

热门文章

  1. AngularJS 1.4对动画系统进行了彻底的重构
  2. jQuery.form的使用方法
  3. linux log rotate
  4. 二、OpenSceneGraph3.4第一个示例
  5. ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用
  6. m3u8解析、转码、下载、合并
  7. SpringBoot从入门到精通一(idea优雅搭建SpringBoot项目)
  8. 工作中vue项目前后端分离,调用后端本地接口出现跨域问题的完美解决
  9. Android 即时通讯开发小结(一)
  10. python 基础学习笔记(1)