FragmentManager 和 FragmentTransaction 到底是做啥的?
Posted
技术标签:
【中文标题】FragmentManager 和 FragmentTransaction 到底是做啥的?【英文标题】:What does FragmentManager and FragmentTransaction exactly do?FragmentManager 和 FragmentTransaction 到底是做什么的? 【发布时间】:2015-06-29 05:45:29 【问题描述】:下面有简单的代码
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
这些代码行做什么?
【问题讨论】:
我很惊讶你得到了答案。据我所知,下面的解释远远不能真正解释这个两步过程。 【参考方案1】:getFragmentManager()
返回 FragmentManager 用于与关联的 Fragment 进行交互 与此活动。
FragmentManager,用于创建添加、删除或替换片段的事务。
fragmentManager.beginTransaction();
对关联的 Fragments 启动一系列编辑操作 这个 FragmentManager。
将使用的 FragmentTransaction 对象。
fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);
将当前片段替换为布局上的mFeedFragment
,id 为:R.id.fragment_container
fragmentTransaction.addToBackStack(null);
将此事务添加到后台堆栈。这意味着 事务提交后会被记住,并会反转 之后从堆栈中弹出时的操作。
对于返回按钮的使用很有用,因此可以回滚事务。 参数名称:
是此返回堆栈状态的可选名称,或者为 null。
查看其他问题What is the meaning of addToBackStack with null parameter?获取信息
Last 语句提交事务并执行所有命令。
查看谷歌文档以获得更多帮助:
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
【讨论】:
你能告诉我一些使用片段的重要应用程序吗?真的有用吗? 是的,因为每个使用抽屉式导航的应用程序都使用片段。 developer.android.com/design/patterns/navigation-drawer.htmldeveloper.android.com/training/implementing-navigation/…【参考方案2】:安卓FragmentManager
FragmentManager
在 Android 中管理 Fragments
,特别是它处理片段之间的事务。事务是一种添加、替换或删除片段的方法。
安卓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
再次使用
fragmentTransaction.commit();
方法commit()
调度这个事务,这不是瞬时的;它被安排在主线程上,以便在线程准备好时完成。
Reference
【讨论】:
是的,我们都知道这些类的作用,但是为什么呢?为什么要单独上课?为什么 FragmentManager 不能完成 FragmentTransaction 的工作? @ScottBiggs 感谢您的提问。我仔细研究了这些类,我相信这是一个分离相似功能的问题; FragmentTransacion 处理与“事务”有关的特定事情,例如动画和面包屑。我的另一个想法是,随着 Android 功能的发展,这将主要有助于未来的发展。我注意到你很合格,不知道你的意见是什么? 您可能是对的,但我们正在尝试解读 Google UI 程序员的想法,这非常困难。 Android 编程一开始非常困难,并且随着每个新版本的增加而变得复杂。在这一点上,我只想要简单,即使这意味着不再向后兼容。 @ScottBiggs,FragmentTransaction 和 FragmentManager 逻辑可能在不同的类中实现的另一个原因:在developer.android.com/reference/android/app/… 中,文档讨论了面包屑标题被修改为“当事务在后台堆栈时” .我可能在此处的左侧字段中,但由于返回堆栈,分离事务逻辑对我来说是有意义的。 ? @CharlesThomas 非常有趣的理论。但是由于 FragmentBreadCrumbs 已被弃用,我有点怀疑这是全部原因。可能确实有一些关于如何处理后堆栈的问题。如果您发现更多,请再次发表评论。以上是关于FragmentManager 和 FragmentTransaction 到底是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章
FragmentManager 和 FragmentTransaction 到底是做啥的?
android.support.v4.app.FragmentManager 还是 android.app.FragmentManager?
安卓开发之Activity传输数据到Fragmen+实例分析