假设我有4个片段
首先创建片段A。在片段A中,我有一个方法将片段A替换为其他4个片段。当然,addToBackStack()
也包括在内。此方法也出现在其他片段中。
现在我使用该方法将片段A替换为片段b。片段A现在位于backstack中。
从老到新
堆栈现在是: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?
如果你用Fragment A替换Fragment D, android会创建另一个A,所以堆栈现在是A B C D A
好吧,如果你用片段a的新实例替换片段D,如FragmentA.newInstance(), backstack现在将是a B C D a。如果,然而,你不想要这种行为,你可以从backstack中检索片段a,并使用该实例。
替换片段的更好的方法是用标记将事务添加到backstack中,并且每当您想要任何先前的片段时,然后用先前添加到该事务的标记弹出backstack。
getFragmentManager().beginTransaction().replace(R.id.container,new MyFragment()).addToBackStack("mytag").commit();
和弹出
getFragmentManager().popBackStack("mytag");
使用这种方法如果你弹出片段A的backstack那么堆栈将弹出意味着A的上部片段也被删除