【问题标题】:Disable fragment transaction animation after it's been commited提交后禁用片段过渡动画
【发布时间】: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


【解决方案1】:

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

现在关于动画的事情,你可以试试this answer

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

那么如果上面的条件为真,你的fragment的onCreateAnimation方法返回一个空动画。

【讨论】:

  • “首先想到的是在去片段 C 之前调用 popBackStackImmediate()。这样当你从 C 返回时,你会直接到 A。”不,我没有。如果我在转到片段 C 之前调用此方法,那么在点击片段 C 上的返回按钮时,我将退出应用程序。 (请记住,在我的示例中,我没有将从 B 到 C 的事务添加到 backstack)。
  • @Lucas 那你为什么不加呢?
  • 因为一旦你在C,你就不能回到B,只能回到A。如果我将B的交易添加到C,那么当回击时我会回到B ,或者如果我使用 popBachStackImmediete() 它仍然不能解决我的问题,因为从 A 到 B 的反向动画仍然存在。
  • @Lucas 您是否阅读了我包含的答案,这会删除动画?
  • 对不起!完全错过了它(白痴)。调查中……给我几天时间,我需要在工作中测试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 2011-06-23
  • 2012-02-08
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多