在替换碎片上的反向顺序



假设我有4个片段

首先创建片段A。在片段A中,我有一个方法将片段A替换为其他4个片段。当然,addToBackStack()也包括在内。此方法也出现在其他片段中。

现在我使用该方法将片段A替换为片段b。片段A现在位于backstack中。

从老到新

堆栈现在是: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?

如果你用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的上部片段也被删除

最新更新