Android 关于替换碎片的backbackback命令

Android 关于替换碎片的backbackback命令,android,android-fragments,Android,Android Fragments,假设我有4个碎片 首先创建片段A。在片段A中,我有一个方法将片段A替换为其他4个片段。当然,还包括了addToBackStack()。这种方法也出现在其他片段中 现在,我使用该方法将片段A替换为片段B。片段A现在处于后台 订单从老到新 现在的堆栈是:A B 然后在片段B中,我用片段C替换它 现在的堆栈是:abc 然后我用D替换片段C 堆栈现在是:A B C D 如果我错了,请纠正我 问题: 如果我用片段A替换片段D,那么B和C会发生什么?它们会从堆栈中弹出吗?现在正确的顺序是什么 如果我用片段A

假设我有4个碎片

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

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

订单从老到新

现在的堆栈是:A B

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

现在的堆栈是:abc

然后我用D替换片段C

堆栈现在是:A B C D

如果我错了,请纠正我

问题:

  • 如果我用片段A替换片段D,那么B和C会发生什么?它们会从堆栈中弹出吗?现在正确的顺序是什么


  • 如果我用片段A替换片段D,android会创建另一个A还是重用以前的A来创建新的A?那么堆栈现在是一个B C D A


  • 如果将片段D替换为片段A,android会创建另一个A,因此堆栈现在是一个B C D A。

    如果将片段D替换为片段A的新实例,如FragmentA.newInstance(),则backbackback现在将是一个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的上部片段也将被删除

    堆栈现在是一个B C D AgetFragmentManager();无法解析此方法