何时使用FragmentTransaction的attach和detach方法

时间:2013-05-22 12:11:45

标签: android fragment fragmenttransaction

我刚刚浏览了attach()的{​​{1}}和detach()方法的文档:

  

FragmentTransaction:先将片段与attach()分离后,重新附加片段。这会导致其视图层次结构被重新创建,附加到UI并显示。

嗯,这是什么意思?

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

    detach(Fragment)

    我删除了mMapFragment = new MapFragment(); ft.beginTransaction(mMapFragment) .attach() .add(R.id.container, mMapFragment) .commit(); 并再次尝试:我没有发现任何差异。 attach()在这个例子中做了什么?与此相比有什么不同:

    attach
  2. 如果上面的示例不足以显示差异......我只是想知道我们何时需要明确调用ft.beginTransaction() .add(R.id.container, mMapFragment) .commit(); attach()?如果您能解释添加/删除/替换方面的差异会更好。

1 个答案:

答案 0 :(得分:75)

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

分离

  

从UI中分离给定的片段。这与当时的状态相同   它放在后台堆栈上:片段从UI中删除,   然而它的状态仍然被片段主动管理   经理。进入此状态时,其视图层次结构将被销毁。

删除

  

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

表示:

通过分离,您只会销毁片段View,但会将其状态保留在片段管理器中。但是,通过删除,您将从片段管理器中删除片段及其状态;此外,如果将片段视图添加到UI容器,它将删除片段视图。 因此,它们都会破坏片段视图,但是分离会将片段状态保留在片段管理器中。


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

添加

  

将片段添加到活动状态。该片段可以任选地   也有它的视图(如果Fragment.onCreateView返回非null)   容器视图的活动。

附加

  

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

表示:

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