返回 2 个屏幕时,Android 活动返回转换刹车

问题描述

我做了一个简单的例子来证明 ActivityOptions.makeSceneTransitionAnimation(activity) 有问题。

我有 3 个活动:A、B 和 C。 流程很简单:A -> B -> C

所有活动都具有相同的风格:

<style name="TransitionsTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:windowEnterTransition">@transition/slide_in_from_bottom</item>
    <item name="android:windowExitTransition">@transition/slide_out_to_bottom</item>
</style>

每当我去的时候:A -> B -> C -> B (back button) -> A (back button)最后一个动画(A -> C)没有播放。

只做 A -> B -> A (back button)

效果很好

这是我开始活动的方式:

fun start(activity: Activity) {
            val intent = Intent(activity,TransitionActivityA::class.java) //or B or C
            val transitionsOptions = ActivityOptions.makeSceneTransitionAnimation(activity)
            activity.startActivity(intent,transitionsOptions.toBundle())
        }

展示问题的应用:https://github.com/jkwiecien/AndroidCaseStudies/tree/transitions 使用分支 transitions

这是 Android 错误还是我做错了什么?

解决方法

它不起作用,因为ActivityB是由ActivityC“启动”的,而它确实可以转换到ActivityB,因为ActivityC是由它启动的。

似乎您必须使用反向 onBackPressed() 手动覆盖 ActivityA 并从 ActivityB 开始 ActivityOptions。这样做的唯一方法是在 overridePendingTransition() 之后调用 finish()