FragmentManager 和 FragmentTransaction 究竟做了什么?

What does FragmentManager and FragmentTransaction exactly do?

下面是简单的代码

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

这些代码行是做什么的?

getFragmentManager()

Return the FragmentManager for interacting with fragments associated with this activity.

FragmentManager,用于创建添加、删除或替换片段的事务。

fragmentManager.beginTransaction();

Start a series of edit operations on the Fragments associated with this FragmentManager.

将使用的 FragmentTransaction 对象。

fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);

用布局上的 mFeedFragment 替换当前片段,id 为:R.id.fragment_container

fragmentTransaction.addToBackStack(null);

Add this transaction to the back stack. This means that the transaction will be remembered after it is committed, and will reverse its operation when later popped off the stack.

对于 return 按钮的使用很有用,因此可以回滚事务。 参数名称:

Is an optional name for this back stack state, or null.

有关信息,请参阅另一个问题 What is the meaning of addToBackStack with null parameter?

Last 语句提交事务并执行所有命令。

请参阅 google 文档以获得更多帮助:

http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html http://developer.android.com/reference/android/app/FragmentManager.html http://developer.android.com/reference/android/app/FragmentTransaction.html

Android FragmentManager

一个FragmentManager在Android中管理Fragments,特别是它处理片段之间的事务。事务是添加、替换或删除片段的一种方式。

Android FragmentTransaction

如前所述,FragmentTransaction 为我们提供了在 Android 中添加、替换或删除片段的方法。它为我们提供了一个与片段交互的界面。


fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);

方法 replace(int containerViewId, Fragment fragment) 替换容器 containerViewId 中现有的 Fragment 对象并添加 Fragment fragment

fragmentTransaction.addToBackStack(null);

此方法,addToBackOfStack(String name),将此事务添加到后台堆栈,可以使用此方法以便 Fragments 被记住并可由 Activity[=30 再次使用=]

fragmentTransaction.commit();

方法commit()安排了这个交易,这不是即时的;它被安排在主线程上,当线程准备好时完成。

Reference