我们有一个Activity包含一个SlidingMenu(https://github.com/jfeinstein10/SlidingMenu),其中有三个选项,我们称它们为A,B1,C1。这些对应于我们在活动中显示的片段。当您从SlidingMenu中选择不同的选项时,我将通过FragmentManager将当前片段替换为新片段。清除Android Fragment没有弹出的背堆栈?
从片段B1你可以去其他两个,我们称他们为B2和B3。这里我们需要Back键带你从B2-> B1或者B3-> B1,所以我调用了transaction.addToBackStack(null)。如果我们在B2或B3上从SlidingMenu中选择一个选项,我们希望清除后退堆栈,因此我使用此问题Clear back stack using fragments中建议的代码,该代码调用popBackStack()直到它清除。
到目前为止这么好。
从片段C1,你可以去片段C2。作为C1/C2比较主/明细设计我使用
fragmentTransaction.setCustomAnimations(R.animator.slide_in_from_right,
R.animator.slide_out_to_left, R.animator.slide_in_from_left,
R.animator.slide_out_to_right);
添加幻灯片动画其中C1滑出,以左侧为C2从右边滑动,反之亦然。在C2上按下后退键使我们回到C1,并带有相反的动画,而且都很好。
但
如果选择从SlidingMenu A或B1和我们popBackStack()来获取从后面堆摆脱C1的,那么它的幻灯片C2出来的权利,这看起来很奇怪。我想要做的是在不运行动画的情况下清除背面堆栈,但我找不到这样做的方法。我试着调用popBackStackImmediate()来代替,但这似乎没有任何区别。
作为一种替代方案,我想我可以避免调用addToBackStack,而是通过Activity.onBackPressed()手动处理用户按下后退键,但也许有一种解决方案我只是看不到?
这似乎正是我所需要的。谢谢! – 2013-04-26 13:06:33
@JonathanCaryl太棒了!我很高兴它的工作,因为我真的不是100%肯定会这样:) – TronicZomB 2013-04-26 13:07:24
不支持我的支持库v23.1.1 – 2015-12-21 16:10:47