通过删除前一个片段来替换当前片段

时间:2018-06-05 11:35:18

标签: android android-fragments

我需要能够通过这样的片段: A-> B-> C1 当我在 C1 时,我需要用 C2 替换它,但是当我按下时我应该被带回 B 而不是 C1 。 我可以这样做:

    String tag = fragment.getClass().getName();
    FragmentManager manager = getSupportFragmentManager();
    manager.popBackStack();
    FragmentTransaction ft = manager.beginTransaction();
    ft.replace(R.id.mainActivity_container, fragment, tag);
    ft.addToBackStack(tag);
    ft.commit();

问题在于,当我从 C1 更改为 C2 时,片段 B 会让它 onCreateInnerView 方法调用。

我需要能够做到这样的事情: A-> B-> C1-> C2-> C1-> C2 并按下 C2 我应该去 B

如何在不重新创建片段 B 的情况下执行替换?

3 个答案:

答案 0 :(得分:2)

您可以处理onBackPressed()事件并将当前片段替换为片段B。

答案 1 :(得分:0)

在转向片段时,您不需要popupstack。因为它会调用你最后一个堆栈的片段onViewCreated方法。

移至 B - > C1 B - > C2 C1 - > C2

  • 需要添加Back stack null
  • 删除popupbackstack

我希望它适合你。

答案 2 :(得分:0)

试试这可能对你有帮助, 只需更换两行,

  manager.popBackStack();//Remove this line
  ft.replace(R.id.mainActivity_container, fragment);//Remove 3rd param in this line
  ft.addToBackStack(tag);//Remove this line

<强> EDITED
  你也可以试试这个

 public void switchContent(Fragment fragment) {

    FragmentManager fragmentManager = getSupportFragmentManager();

    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();  

     for (int i = 0; i < fragmentManager.getBackStackEntryCount(); ++i) {
     Fragment currentFragment = this.getSupportFragmentManager().findFragmentById(R.id.mainActivity_container);
        if(currentFragment != B){
        fragmentManager.popBackStack();
        }
    }
    fragmentTransaction.replace(R.id.mainActivity_container, fragment).commit();
}