FragmentManager和FragmentTransaction到底做了什么?

Ali*_*ari 49 android fragmenttransaction fragmentmanager fragment-backstack

我在下面有简单的代码

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

这些代码行做了什么?

Zel*_*don 63

getFragmentManager()
Run Code Online (Sandbox Code Playgroud)

返回FragmentManager以与与此活动关联的片段进行交互.

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

fragmentManager.beginTransaction();
Run Code Online (Sandbox Code Playgroud)

在与此FragmentManager关联的Fragments上启动一系列编辑操作.

将使用的FragmentTransaction对象.

fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);
Run Code Online (Sandbox Code Playgroud)

mFeedFragment布局中的id 替换当前片段:R.id.fragment_container

fragmentTransaction.addToBackStack(null);
Run Code Online (Sandbox Code Playgroud)

将此事务添加到后台堆栈.这意味着事务将在提交后被记住,并在稍后从堆栈中弹出时将反转其操作.

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

是此后备堆栈状态的可选名称,或者为null.

有关其他问题的信息,请参阅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 /参考/安卓/应用/ FragmentTransaction.html


Gre*_*ady 24

Android的 FragmentManager

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

Android的 FragmentTransaction

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


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

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

fragmentTransaction.addToBackStack(null);

此方法addToBackOfStack(String name)将此事务添加到后端堆栈,这可以使用,以便Fragments记住并可以再次使用Activity

fragmentTransaction.commit();

该方法commit()调度此事务,这不是瞬时的; 它在主线程上安排在线程准备好时完成.

参考

  • 是的,我们都知道这些课程的作用,但是为什么?为什么单独的课程?为什么FragmentManager无法完成FragmentTransaction的工作? (4认同)
  • @ScottBiggs 感谢您在那里提出问题。我仔细研究了这些类,我相信这是一个分离相似功能的问题;FragmentTransacion 处理与“交易”有关的特定事情,例如动画和面包屑。我的另一个想法是,随着 Android 功能的增长,这将主要有助于未来的开发。我发现你很有资格,不知道你有什么意见? (2认同)
  • 你可能是对的,但我们试图读懂 Google UI 程序员的想法,这非常困难。Android 编程开始时非常困难,并且随着每个新版本的出现而增加了复杂性。在这一点上,我只想要简单,即使这意味着不再向后兼容。 (2认同)