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

  1. 我创建了一个AppCompatActivity Opened片段A-> B-> C-> D-> E-> F with replace()
  2. 当我按下按钮时,我在F中包含按钮我要清除碎片到C并想在C顶部打开G所以新的序列将是A-> B-> C-> GI可以用popBackStackImmediate执行此操作(并使用替换function在C顶部添加G.

问题 :当我按下按钮时,我看到C的几分之一秒,然后显示G.To防止这种情况我尝试在答案的帮助下停止animation,但即使animation停止,C仍然可见几分之一秒片段。

在更换C顶部的片段时,有没有更好的方法来设计片段流或解决这些电影的方法?

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

使用此方法从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(); } 

这是一个video演示video。 在此处输入图像描述

这是github上这个项目的完整版

这种导航流程的更多通用解决方案 ,像这样替换片段

 getSupportFragmentManager().beginTransaction(). replace(R.id.f_container,new FragmentA()) .addToBackStack("A") .commit(); getSupportFragmentManager().beginTransaction(). replace(R.id.f_container,new FragmentB()) .addToBackStack("B") .commit(); 

像智者一样直到片段F并且假设你现在在提交按钮上点击提交按钮

使用下面的POP_BACK_STACK_INCLUSIVE标志向后popup堆栈直到D,并使用片段G添加替换容器

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

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

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