【问题标题】: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();

这些代码行做什么?

【问题讨论】:

  • 我很惊讶你得到了答案。据我所知,下面的解释远远不能真正解释这个两步过程。

标签: android fragmenttransaction fragmentmanager fragment-backstack


【解决方案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

【讨论】:

【解决方案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 已被弃用,我有点怀疑这是全部原因。可能确实有一些关于如何处理后堆栈的问题。如果您发现更多,请再次发表评论。
猜你喜欢
  • 1970-01-01
  • 2012-06-14
  • 2015-08-06
  • 2013-09-02
  • 2014-01-02
  • 2013-10-10
  • 2017-05-08
  • 2022-01-20
  • 2012-10-17
相关资源
最近更新 更多