【问题标题】:When to use the attach and detach methods of FragmentTransaction何时使用 FragmentTransaction 的 attach 和 detach 方法
【发布时间】:2013-05-17 11:37:09
【问题描述】:

我刚刚浏览了FragmentTransactionattach()detach() 方法的文档:

attach():在片段之前使用detach(Fragment) 从 UI 中分离后重新附加片段。这会导致其视图层次结构被重新创建、附加到 UI 并显示。

嗯,这是什么意思?

  1. 更具体地说,我看到了一个例子:

    mMapFragment = new MapFragment();
    ft.beginTransaction(mMapFragment)
      .attach()
      .add(R.id.container, mMapFragment)
      .commit();
    

    我删除了attach() 并再次尝试:我没有发现任何区别。 attach 在这个例子中做了什么?与此相比有什么不同:

    ft.beginTransaction()
      .add(R.id.container, mMapFragment)
      .commit();
    
  2. 如果上面的示例不足以显示差异...我只想知道我们什么时候需要显式调用attach()detach()?如果你能解释一下添加/删除/替换的区别会更好。

【问题讨论】:

  • 你遇到了什么错误。
  • 我个人使用attach一次,如果我想更新就调用replace
  • 您好,示例运行没有错误。我只是知道为什么该示例调用 attach() 以及调用附加的其他场合是什么。我很困惑,因为在我看来替换、添加、删除可以做所有事情,那么附加和分离的意义何在?

标签: android fragment fragmenttransaction


【解决方案1】:

我认为最好看一下 FragmentTransaction Documentation 中 Detach 和 Remove 的定义以了解发生了什么。

分离

从 UI 中分离给定的片段。这与当 它被放在后栈中:从 UI 中移除片段, 但是它的状态仍然由片段积极管理 经理。当进入这种状态时,它的视图层次结构被破坏。

删除

删除现有片段。如果它被添加到容器中,它的视图 也会从该容器中删除。

意思是:

通过分离,您只会破坏片段视图,但会将其状态保留在片段管理器中。但是,通过 removing 您将从片段管理器中删除片段及其状态;此外,如果将片段视图添加到 UI 容器中,它将删除片段视图。 所以它们都破坏了fragment view,但是detach将fragment状态保留在fragment manager中。


现在是时候看看附加和添加了。

添加

将片段添加到活动状态。这个片段可以选择 也将其视图(如果 Fragment.onCreateView 返回非空)放入 活动的容器视图。

附加

在片段之前从 UI 中分离后重新附加片段 与分离(片段)。这导致其视图层次结构 重新创建、附加到 UI 并显示。

意思是:

添加 Fragment 后,它将被添加到活动状态,并且它的视图将添加到定义的容器视图中。 但是,如果片段尚未添加到 UI,则不会显示任何内容。它只是附加到片段管理器。但是,如果视图已经添加到 UI 中的容器并在此之后分离,则通过附加它将再次显示在其容器中。最后,如果您想暂时销毁片段视图并希望在未来显示和构建其视图而不丢失其在活动中的状态,则可以使用附加和分离。

【讨论】:

  • 我知道你写这篇文章已经有一段时间了,但感谢上帝的解释!
猜你喜欢
  • 2011-12-22
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
相关资源
最近更新 更多