简单介绍Fragment如何依附于Activity

 
大概了解下Fragment如何依赖于FragmentActivity

我们一般在FragmentActivity做有关Fragment事务处理的时候都会用到
FragmentManager fm = getSupportFragmentManager();
getSupportFragmentManager方法调用了   mFragments.getSupportFragmentManager()
这里的mFragments是FragmentActivity加载的时候已经完成了赋值
final FragmentController mFragments = FragmentController.createController(new FragmentActivity.HostCallbacks());
另:
1 HostCallbacks   这里的HostCallbacks继承了FragmentHostCallback,FragmentHostCallback是Fragment和宿主FragmentActivity之间的桥梁,通过它可以回调FragmentActivity的方法。
HostCallBacks 重写了父类的几个方法,其中用的比较多的是onStartActivityFromFragment、onStartIntentSenderFromFragment等. 并且HostCallBacks 保存了FragmentActivity的引用,便于Fragment调用FragmentActivity的方法。

FragmentHostCallback是一个抽象类,负责调用各种各样的回调,这样的话,当Avtivity的状态,生命周期发生改变的时候,就可以通过这个回调接口进行统一管理,在上面提到的HostCallbacks是FragmentActivity里面的一个继承FragmentHostCallback的内部类。

2 FragmentController
类加载的的时候初始化了 FragmentManagerImpl(FragmentManager的实现类)
final FragmentManagerImpl mFragmentManager = new FragmentManagerImpl();
FragmentController定义了所有对Fragment的管理操作,包括我们的Activity在onCreate,onResume,onDestroy等各种生命周期或回调对Fragment的影响,都是由这个类来控制的。

3 FragmentManagerImpl(FragmentManager的实现类)
FragmentManagerImpl里面的具体实现就是有关Fragment是如何运行的,各种各样的生命周期,判断Fragment的不同状态,切换状态。

4 FragmentTransaction
处理Fragment的事务,例如add、remove、hide等。
Transaction只是用作记录对Fragment的操作记录,最终调用commit的时候,实际上调用的还是FragmentManagerImpl的方法

5.主线程执行Transaction事务
FragmentManager 靠 mActive存储Fragment
FragmentManagerImpl的 execPendingActions 方法---> performPendingDeferredStart -->moveToState-->根据f.mState 状态回调Fragment生命周期


总结:
1.在FragmentActivity初始完成之后,创建了一个FragmentController,FragmentController有一个成员变量是HostCallbacks,它含有当前FragmentActivity的引用,
HostCallbacks被实例化以后它的一个成员变量 FragmentManagerImpl 被初始化。
2.当调用getSupportFragmentManager 的时候,调用了HostCallbacks父类FragmentCallBacks的getSupportFragmentManager方法,返回就是第一步已完成初始化的
FragmentManagerImpl。
3.开启一个Fragmetn事务时,调用FragmentManagerImpl的beginTransaction方法,
就是调用new BackStackRecord(this)。这里创建了一个含有FragmentManagerImpl引用的FragmentTransaction对象.外界添加add 删除 remove 显示show 隐藏 hide 
替换replace 都是调用doAddOp()方法,将属性值保存在Op的对象中。
4.调用BackStardRecord的 beginTransaction实际是调用它的commitInternal(boolean allowStateLoss)方法

BackStackState
BackStackRecord(继承FragmentTransaction,控制Fragment回退栈的入口)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值