替换片段的后台补丁顺序

时间:2015-07-14 09:59:53

标签: android android-fragments

说我有4个片段。

首先创建片段A.在片段A中,我有一个方法将片段A替换为其他4个片段。当然,还包括addToBackStack()。这种方法也存在于其他片段中。

现在我使用该方法将片段A替换为片段B.片段A现在位于后台。

订单是最新的

现在堆叠是:A B

然后在片段B中,我用片段C替换它。

现在堆叠是:A B C

然后我用D替换片段C.

现在堆叠是:A B C D

如果我错了,请纠正我

问题:

  1. 如果我用片段A替换片段D,B和C会发生什么事情。它们会从堆栈中弹出吗?现在正确的订单是什么。

  2. 如果我用Fragment A替换Fragment D,android会创建另一个A还是重用之前的A来创建一个新的?现在堆栈是A B C D A?

3 个答案:

答案 0 :(得分:1)

如果用Fragment A替换Fragment D,android会创建另一个A,所以堆栈现在是A B C D A.

答案 1 :(得分:0)

好吧,如果你用片段A的新实例替换片段D,比如FragmentA.newInstance(),那么backstack现在将是ABCD A.但是,如果你不想要这种行为,你可以检索来自backstack的片段A并使用该实例。

答案 2 :(得分:0)

更换片段的更好方法是使用标记将事务添加到backstack,并且只要您需要任何先前的片段,然后使用之前添加到该事务中的该标记弹出Backstack。

getFragmentManager().popBackStack("mytag");

然后弹出

{{1}}

使用这种方法,如果弹出片段A的后台堆栈,则弹出堆栈意味着A的上层片段也被删除