android Fragment 里的getActivity生效

2015-12-29  本文已影响563人  白天才痴
FragmentActivity.java中
final FragmentController mFragments = FragmentController.createController(new HostCallbacks());

即在FragmentActiviy初始化的时候把自己包裹在FragmentHostCallback里传给了FragmentController
然后在其FragmentActiviy 的onStart函数中,

@Override
protected void onStart() {
    super.onStart();

    mStopped = false;
    mReallyStopped = false;
    mHandler.removeMessages(MSG_REALLY_STOPPED);

    if (!mCreated) {
        mCreated = true;
        mFragments.dispatchActivityCreated();
    }

    mFragments.noteStateNotSaved();
    mFragments.execPendingActions();//执行fragment的初始化操作

    mFragments.doLoaderStart();

    // NOTE: HC onStart goes here.

    mFragments.dispatchStart();
    mFragments.reportLoaderStart();
}

在FragmentManager中的

void moveToState(Fragment f, int newState, int transit, 
              int transitionStyle,   boolean keepActive) 

函数中,进行Fragment的状态切换,fragment的初始化,创建视图view等动作都在这里进行,同时为fragment.mHost赋值,到此为止fragment获取到了附属的activity实例。所以之后可以调用getActivity()获取该宿主。

其实时机就是Fragment调用onAttach的时候,但是看onAttach没有传入activity所以之前一直不能确定是在哪给赋值的。

上一篇下一篇

猜你喜欢

热点阅读