提交后禁用片段事务动画

4
我有一个不太常见的片段导航,因为我希望应用程序具有响应性。为此,我几乎只使用片段的show/hide方法。
每当我想要导航到另一个片段并使用返回键返回时,我将该事务添加到backstack中。同时,我还将过渡动画设置为该事务,以便当用户按下返回键时,它会显示反转动画(即popBackStackImmediate()的效果),以前往上一个片段。
我通过以下方式添加这些动画:
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

我们称之为A -> B -> A导航。因此,当将A移动到B时,会显示一个打开动画;当我们返回到A时,会显示一个反向动画。
然而,当我需要从A到B并将该事务添加到后退堆栈(以便能够使用后退按钮返回到A),然后从B到C(不将此事务添加到后退堆栈),再从C到A按下后退按钮时,问题就出现了。在这种情况下,我的问题是,当用户在C片段上按下后退按钮时,我希望立即将用户带回A片段。但是,由于在A到B的事务中添加了动画,并且该事务已添加到后退堆栈中,因此当用户在片段C上按下后退按钮时,将显示反转事务A-> B(实际上,在显示片段A之前,片段B将在屏幕上闪烁一小段时间)。
如果我能够在A->B事务中访问事务对象并禁用该过渡动画,那么所有操作都将很好地运行。但是,似乎在提交(commit())后,此操作没有任何效果。
有没有办法禁用该动画?

您可以放弃使用后退堆栈并覆盖onBackPressed事件,实现自己的逻辑。例如,在片段C中按下返回键时,始终创建一个片段事务(带有所需的任何动画)以返回到片段A。 - NameSpace
1个回答

1

首先想到的是在转到C片段之前立即调用popBackStackImmediate()。这样当您从C返回时,直接回到A。

现在关于动画问题,您可以尝试this answer

它基本上说您需要创建一个布尔标志,当您不想看到动画时将其设置为true。

然后如果满足上述条件,则片段的onCreateAnimation方法将返回一个空动画。


因为一旦到达C,就无法返回B,只能返回A。如果我从B到C添加了事务,那么当点击返回时,我会返回到B,或者如果我使用popBachStackImmediete(),它仍然无法解决我的问题,因为从A到B的反向动画仍然存在。 - Lucas
@Lucas,你有没有看到我的答案,可以去掉动画效果吗? - Simas
请注意,如果我不设置转换,一切都按顺序进行,因此没有“中间片段闪回”。 - Lucas
我正在覆盖Fragment方法,就像提供的链接中一样。具体方法是:“public Animation onCreateAnimation(int transit,boolean enter,int nextAnim)”。 - Lucas
我没有直接使用Animator。而且我正在使用支持片段。有了这些信息,你能否请你重新表达一下你的消息? - Lucas
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接