为啥在使用 FLAG_ACTIVITY_REORDER_TO_FRONT 时不能禁用更改活动的动画?
Posted
技术标签:
【中文标题】为啥在使用 FLAG_ACTIVITY_REORDER_TO_FRONT 时不能禁用更改活动的动画?【英文标题】:Why can't I disable the animation for changing activities when using FLAG_ACTIVITY_REORDER_TO_FRONT?为什么在使用 FLAG_ACTIVITY_REORDER_TO_FRONT 时不能禁用更改活动的动画? 【发布时间】:2019-05-25 04:08:36 【问题描述】:在我的游戏中,当用户决定将屏幕从“消息”屏幕切换到“个人资料”屏幕时,我想确保用户可以切换屏幕并能够保持之前的活动。
所以我有这段代码:
Intent intent = new Intent(this, Profile.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityIfNeeded(intent, 0);
overridePendingTransition(0, 0);
它可以工作,除了它只在第一次从屏幕切换时禁用动画,之后它就不起作用了。它播放动画,我不想那样。
我该如何解决这个问题?
【问题讨论】:
你需要从一个移动到另一个没有动画。 Disable activity slide-in animation when launching new activity?的可能重复 @RumitPatel 我已经查看了对该问题的回复,但没有一个可以解决我的问题。 我很困惑。您正在使用startActivityIfNeeded()
。这是startActivityForResult()
的变体。当您启动Activity
并期望它返回结果时,您启动的Activity
需要调用finish()
以便将结果返回给调用Activity
。在这种情况下,将永远不会存在Profile
的现有实例,因为之前使用的所有实例都已完成。请编辑您的帖子并解释更多您的架构以及它应该如何工作。还要在帖子中包含您的清单。
【参考方案1】:
您可以按照@DKV 的建议禁用动画。
不是这个
Intent intent = new Intent(this, Profile.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityIfNeeded(intent, 0);
overridePendingTransition(0, 0); // remove this line
试试这个
Intent intent = new Intent(this, Profile.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivityIfNeeded(intent, 0);
注意
添加标志
不是
设置标志
【讨论】:
动画仍在运行。动画不仅在第一次切换屏幕时运行。【参考方案2】:我按照this 的回答让这个工作。
创建一个没有指定动画的样式:
<item name="android:windowAnimationStyle">@null</item>
然后将其用作清单中该活动的主题。
【讨论】:
以上是关于为啥在使用 FLAG_ACTIVITY_REORDER_TO_FRONT 时不能禁用更改活动的动画?的主要内容,如果未能解决你的问题,请参考以下文章
为啥有人应该在 git commit 之前使用 git add?或者为啥有人应该使用 git add 呢?
为啥在 TCP 中使用 bind()?为啥它只用在服务器端而不用在客户端?
为啥在 0-1 背包问题中我们使用 INT_MIN 以及为啥 0 不起作用
在 Java 7 ConcurrentHashMap 中,为啥在写的时候需要段锁?为啥我们不能再次使用 Unsafe 来保持非阻塞?