在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 "
+