FragmentTrasaction常用方法及应用场景

一、FragmentTrasaction的常用方法

FragmentTrasaction的add, remove, replace, hide, show, replace, attach, detach方法是如何影响到Fragment的生命周期的?

首先看Fragment生命周期:

实验如下:

  1. add() 

    在这里插入图片描述

  2. remove()在这里插入图片描述
  3. replace() 相当于remove后再add
  4. hide() 生命周期方法不会被回调在这里插入图片描述
  5. show() 生命周期方法不会被回调在这里插入图片描述
  6. detach()在这里插入图片描述
  7. attach()在这里插入图片描述

注:其中的onClick的日志是执行了对应的方法后,Fragment的isAdd()方法的返回结果。

二、Fragment管理方式应用场景 

1.Fragment管理的最佳实践一:

add、hide和show,并通过onHiddenChanged完成Fragment之间切换时候的初始化工作。
实践目标:
(1)每个Fragment显示状态切换的时候既不会销毁和重建对象,也不会销毁和重建布局
(2)通过onHiddenChanged完成Fragment之间切换完成前后台切换时候onResume里面需要做的初始化工作,弥补了生命周期不一致所带来的Fragment之间切换时候的初始化工作不能完全同步的问题

2.Fragment管理的实践二:

replace+addToBackStack(null)

fragment的管理从操作流程上来说可以分为同级式和流程式:

  • 同级式Fragment: 比如QQ的主界面,消息,联系人,动态,这三个Fragment就属于同级关系,我们平时项目中主界面的Fragment也是属于同级Fragment 

  • 流程式Fragment:比如我这个示例Demo,可以理解为用户账户流程,可以包括:登录/注册模块----忘记/找回密码模块----用户协议模块,这些Fragent就是属于流程式Fragment

实践目标:
(1)所有显示过的fragment的对象都在内存中,被替换掉的fragment是布局被销毁,而对象并没有完全被销毁
(2)被替换掉的布局重新显示时候声明周期从onCreateView–…–onResume,除了fragment对象不重新onAttach和onCreate之外,可以通过popBackStack返回上一级fragment。

总结:

  • add、hide、show+onHiddenChanged这种方法,适合同级fragment的需求,3个或者3个以下,数据不多可以不考虑数据预加载,数据多的话可以取消数据预加载;
  • replace+addToBackStack(null)方法,适合流程式fragment管理;
  • viewpager+fragment:适合同级多个fragment的情况。

引用:

1. FragmentTransaction的方法如何影响到Fragment的生命周期

2. tab+Fragment管理最佳实践

猜你喜欢

转载自blog.csdn.net/lrxb_123/article/details/105126267