【发布时间】:2014-08-01 10:18:52
【问题描述】:
我有一些不常见的片段导航,因为我想让应用程序响应。因此,我几乎只使用带有片段的显示/隐藏方法。
每当我想导航到另一个片段并使用返回键返回时,我都会将此事务添加到后台堆栈。有了这个,我还为该事务设置了过渡动画,这样当用户按下返回时,当用户转到上一个片段时,它会显示一个反转动画(popBackStackImmiediate() 的效果)。
我通过以下方式添加这些动画:
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(实际上,片段 B 闪烁在显示片段 A 之前,在屏幕上显示几分之一秒)。
如果我能够访问 A->B 事务中的事务对象并禁用该过渡动画,这一切都会运行得很好。但是,在 commit() 完成后,此操作似乎无效。
无论如何我可以禁用该动画吗?
【问题讨论】:
-
你可以放弃一个 backstack 并覆盖 onbackKey 按下事件,并实现你自己的逻辑。例如,在片段 C 中按下后,总是会创建一个片段事务(带有您需要的任何动画)以转到片段 A。
标签: android fragment fragmenttransaction