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所以之前一直不能确定是在哪给赋值的。
网友评论