我刚刚浏览了attach()
的{{1}}和detach()
方法的文档:
FragmentTransaction
:先将片段与attach()
分离后,重新附加片段。这会导致其视图层次结构被重新创建,附加到UI并显示。
嗯,这是什么意思?
更具体地说,我看到了一个例子:
detach(Fragment)
我删除了mMapFragment = new MapFragment();
ft.beginTransaction(mMapFragment)
.attach()
.add(R.id.container, mMapFragment)
.commit();
并再次尝试:我没有发现任何差异。 attach()
在这个例子中做了什么?与此相比有什么不同:
attach
如果上面的示例不足以显示差异......我只是想知道我们何时需要明确调用ft.beginTransaction()
.add(R.id.container, mMapFragment)
.commit();
和attach()
?如果您能解释添加/删除/替换方面的差异会更好。
答案 0 :(得分:75)
我认为最好在FragmentTransaction Documentation中查看Detach和Remove的定义,以了解发生了什么。
从UI中分离给定的片段。这与当时的状态相同 它放在后台堆栈上:片段从UI中删除, 然而它的状态仍然被片段主动管理 经理。进入此状态时,其视图层次结构将被销毁。
删除现有片段。如果它被添加到容器中,则为其视图 也从该容器中删除。
通过分离,您只会销毁片段View,但会将其状态保留在片段管理器中。但是,通过删除,您将从片段管理器中删除片段及其状态;此外,如果将片段视图添加到UI容器,它将删除片段视图。 因此,它们都会破坏片段视图,但是分离会将片段状态保留在片段管理器中。
现在是时候看看附加和添加。
将片段添加到活动状态。该片段可以任选地 也有它的视图(如果Fragment.onCreateView返回非null) 容器视图的活动。
在先前从UI中取消片段之后重新附加片段 与分离(片段)。这会导致其视图层次结构 重新创建,附加到UI并显示。
添加Fragment后,它将被添加到活动状态,其视图将被添加到已定义的Container视图中。 但如果片段尚未添加到UI,则通过附加将不会显示任何内容。它只是附加到片段管理器。但是,如果视图已添加到UI中的容器并在此之后分离,则通过附加它将再次显示在其容器中。最后,如果你想暂时销毁片段View并希望在将来显示和构建其视图而不会丢失其活动内的状态,你可以使用attach和detach。