无需轻拂即可管理片段Backstack流程

时间:2018-02-22 11:37:20

标签: android android-fragments fragment-backstack fragmentmanager

  1. 我创建了AppCompatActivity Opened片段A-> B-> C-> D-> E-> F with replace()
  2. 当我按下时,我在F上包含按钮 按钮我想清除碎片直到C并想在C顶部打开G所以新的序列将是A-> B-> C-> G.我可以用 popBackStackImmediate()并在C上添加G with replace function。
  3. 问题:当我按下按钮时,我看到C几分之一秒,然后显示G.To防止这种情况我试图在answer的帮助下停止动画但是即使片段停止动画,C仍然可见几秒钟。

    在替换C顶部的片段时,有没有更好的方法可以设计片段流或解决此片段的方法?

2 个答案:

答案 0 :(得分:5)

我对这个问题非常好奇,我创建了一个示例项目并实现了您在问题中提到的相同用例。这是我如何处理这个。

使用此方法从backstack中删除F,E,D片段

private void removeFragments() {
    getSupportFragmentManager().popBackStack("F", FragmentManager.POP_BACK_STACK_INCLUSIVE);
    getSupportFragmentManager().popBackStack("E", FragmentManager.POP_BACK_STACK_INCLUSIVE);
    getSupportFragmentManager().popBackStack("D", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

使用此方法替换片段

private void replaceNewFragment(String key) {
    getSupportFragmentManager().beginTransaction().addToBackStack(key)
            .replace(android.R.id.content, AFragment.newInstance(key)).commit();
}

这是一段视频演示视频。 enter image description here

以下是github

上完成的这个项目

答案 1 :(得分:1)

这种导航流程的

更多通用解决方案,像这样替换片段

getSupportFragmentManager().beginTransaction().
                  replace(R.id.f_container,new FragmentA())
                    .addToBackStack("A")
                    .commit();
getSupportFragmentManager().beginTransaction().
                  replace(R.id.f_container,new FragmentB())
                    .addToBackStack("B")
                    .commit();
像p一样聪明地做到片段F并假设你在F上有提交按钮 现在点击提交按钮

使用下面的POP_BACK_STACK_INCLUSIVE标记弹回堆栈直到D,并使用片段G添加替换容器

getActivity().getSupportFragmentManager().popBackStack("D",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
getSupportFragmentManager().beginTransaction().
                      replace(R.id.f_container,new FragmentG())
                        .addToBackStack("G")
                        .commit();

现在当您按下后退按钮时,您将看到片段C

我希望这能帮到你,为我工作