FragmentManager分析(个人笔记)

在Activity中动态添加Fragment:

FragmentTransaction transaction = getFragmentManager().beginTransaction();
        transaction.add(R.id.content, fragment);
        transaction.commit();

1.getFragmentManager():

final FragmentController mFragments = FragmentController.createController(new HostCallbacks());//Activity通过FragmentController来控制Fragment

public FragmentManager getFragmentManager() {
        return mFragments.getFragmentManager();
    }

HostCallbacks():

public HostCallbacks() {
            super(Activity.this /*activity*/);
        }

FragmentHostCallback(Activity activity) {
        this(activity, activity /*context*/, activity.mHandler, 0 /*windowAnimations*/);
    }

    FragmentHostCallback(Activity activity, Context context, Handler handler,
            int windowAnimations) {
        mActivity = activity;//持有当前Activity
        mContext = context;
        mHandler = handler;
        mWindowAnimations = windowAnimations;
    }

createController():

 public static final FragmentController createController(FragmentHostCallback<?> callbacks) {
        return new FragmentController(callbacks);
    }

private FragmentController(FragmentHostCallback<?> callbacks) {
        mHost = callbacks;//持有HostCallbacks,HostCallbacks持有Activity
    }

final FragmentManagerImpl mFragmentManager = new FragmentManagerImpl();

FragmentManagerImpl getFragmentManagerImpl() {
        return mFragmentManager;//这就是Activity中getFragmentManager()最后得到的
    }

2.beginTransaction()

public FragmentTransaction beginTransaction() {
        return new BackStackRecord(this);
    }

public BackStackRecord(FragmentManagerImpl manager) {
        mManager = manager;//BackStackRecord是FragmentTransaction的实现类,持有FragmentManager
    }

3.add()

public FragmentTransaction add(Fragment fragment, String tag) {
        doAddOp(0, fragment, tag, OP_ADD);
        return this;
    }

  private void doAddOp(int containerViewId, Fragment fragment, String tag, int opcmd) {
        fragment.mFragmentManager = mManager;

        if (tag != null) {
            if (fragment.mTag != null && !tag.equals(fragment.mTag)) {
                throw new IllegalStateException("Can't change tag of fragment "
                        +
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值