Fragment一:FragmentManager和FragmentTransaction总结分析

概述:

在使用fragment的路上也是呕心沥血,在此,对Fragment的各个重要的使用细节,问题,和使用场景,做详细总结分析,本篇幅不会对Fragemnt的基本使用,生命周期等作概括介绍

Fragment使用优势简述:
1. 在activity的使用中,默认总会有过渡动画,是因为在切换的时候需要在对内存中做切换,而Fragment则轻量级很多,纵享丝滑的快。
2. 在使用中不需要在manifests中像activity一样需要去注册,更简洁
3. 更好的支持了屏幕展示碎片化的需求
4. Fragment支持同界面展示的嵌套,这一点能够使代码的逻辑结构更清新,一定程度上,对代码起到了解耦的作用
5. 可能还有其他的,在此处就不一一概述

目录:

FragmentManager:

不同的FragmentManager:

见其名,知其意,是关于Fragment的管理器,在开发中,使用比较多;
其中关于Manager,用的比较多的API:
- getSupportFragmentManager():在Activity中使用Fragment的管理器,对所有Fragment进行管理。
- getFragmentManager():与 getSupportFragmentManager()功能是一样的,只是是在Fragment中使用
- getChildFragmentManager():在Fragment嵌套使用中经常使用到,但这里需要注意一个点,看下图:

解析图
在fragment创建childFragment的时候,需要注意的是:使用getChildFragmentManager() 使用getFragmentManager()会导致内存泄漏,在嵌套的Fragment中,内部的fragment创建,需要使用getChildFragmentManager()

FragmentManager常用的api:
  • getFragments():可以获取所有创建时候add进去的所有Fragment;通常可以通过这个api来获取需要指定操作的fragment对象

  • manager.findFragmentByTag(String tag): 通过TAG获取指定的Fragment;这个TAG,是在创建Fragment时,调用addToBackStack(String tag)进行绑定关系的

  • popBackStack(): 弹出栈顶fragment

  • popBackStack(String tag,int flags):

    1. tag可以为null或者相对应的tag,flags只有0和1(POP_BACK_STACK_INCLUSIVE)两种情况
    2. 如果tag为null,flags为0时,弹出回退栈中最上层的那个fragment。
    3. 如果tag为null ,flags为1时,弹出回退栈中所有fragment。
    4. 如果tag不为null,那就会找到这个tag所对应的fragment,flags为0时,弹出该
      fragment以上的Fragment,如果是1,弹出该fragment(包括该fragment)以
      上的fragment。
  • popBackStackImmediate相关的方法与上面逻辑是一样的与上面不同的是,在调用的时候会立即执行弹出。

FragmentTransaction:

管理着Fragment所有的展示交互,还有Fragment的回滚事件

FragmentTransaction常用的api:
  • add():将一个Fragment实例对象添加到集合列表的尾部,当展示的时候会在activity的最上层
  • remove():将一个Fragment实例对象从存储的集合列表中移除,并且将其从UI界面中销毁
  • replace():将上一个Fragmnt的实例对象从存储的集合列表中移除,将当前的Fragment实例对象添加到存储的链表尾部,当展示的时候会在activity的最上层
  • hide():将一个fragment,从展示状态隐藏起来,实例对象不被销毁
  • show():将一个fragment实例对象,展示出来
  • addToBackStack():将fragment添加到回退栈中

    add()replace() 运用总结:

    在项目的使用中,通常习惯使用add()加载,add方式视图不会重建,会被保存起来,而replace()每次都会remove掉前面的视图,而replace方式的回退,旧的视图每一次都会重建,在用户体验上不好。

    add()和replace()的使用,不能够混合使用,在混合使用的情况下,会导致回退栈混乱,导致的原因是在回退过程中记录的角标存在问题

    hide()show() 运用总结:

    通常的使用情况是在主界面上,有多Tab键切换情况

FragmentTransaction事儿需要用到的api:
  • detach():将视图View和Fragment分离,视图View也会从ViewTree中删除,还会将Fragment从add的队列中删除,所以在调用isAdd方法的时候返回的是false,但实例对象本身是还存在的,通过FragmentManager的findFragmentByTag还可以获取到实例对象。
  • attach():通过fragment的onCreateView()的重建视图,并且被重新加入到add的队列中,并且处于队列头部。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值