代码之家  ›  专栏  ›  技术社区  ›  SMGhost

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

  •  3
  • SMGhost  · 技术社区  · 6 年前

    我需要能够通过这样的碎片: A->B->C1 当我在 C1 我要换成 C2 ,但当我按下后退键时 而不是 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 碎片 得到它的 OnCreateInnerView 方法已调用。

    我需要做这样的事情: A->B->C1->C2->C1->C2 再按一下 C2 我应该去

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

    3 回复  |  直到 6 年前
        1
  •  2
  •   Phantômaxx    6 年前

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

        2
  •  0
  •   Rujul Gandhi    6 年前

    你不需要做的第一件事 popupstack 同时移动到碎片。因为它会调用最后一个堆栈的片段 onViewCreated 方法。

    当移动到 B& GT;C1 , B& GT;C2 C1-GT;C2 :

    • 需要添加后堆栈 null
    • 删除弹出包堆栈

    我希望这对你有用。

        3
  •  0
  •   jigar savaliya    6 年前

    试试这个也许能帮到你, 换两条线,

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

    编辑
    你也可以试试这个

     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();
    }