说我有4个片段。
首先创建片段A.在片段A中,我有一个方法将片段A替换为其他4个片段。当然,还包括addToBackStack()
。这种方法也存在于其他片段中。
现在我使用该方法将片段A替换为片段B.片段A现在位于后台。
订单是最新的
现在堆叠是:A B
然后在片段B中,我用片段C替换它。
现在堆叠是:A B C
然后我用D替换片段C.
现在堆叠是:A B C D
如果我错了,请纠正我
问题:
如果我用片段A替换片段D,B和C会发生什么事情。它们会从堆栈中弹出吗?现在正确的订单是什么。
如果我用Fragment A替换Fragment D,android会创建另一个A还是重用之前的A来创建一个新的?现在堆栈是A B C D A?
答案 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的上层片段也被删除