Android 片段 return 过渡使用带 Jetpack 导航的共享元素

Android fragment return transitions using shared elements with jetpack navigation

我一直在将我的应用程序迁移到 Android Jetpack 导航组件,但在共享元素转换方面遇到困难。

两个片段都设置了 transitionName 属性,我使用以下代码开始导航(根据 the animation documentation):

findNavController().navigate(
    MainFragmentDirections.actionViewEvent(event.name),
    FragmentNavigatorExtras(
        backgroundElement to "event_card",
        titleElement to "event_name"
    )
)

最初,仅此一项根本行不通。但是,在将以下代码添加到目标片段后,共享元素在进入时已设置动画:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
}

但是,仍然没有共享元素return过渡。是否可以在 enter 和 return 上启用转换? (当这两个片段是单独的活动时,我以前有过这个工作。)

知道我在使用操作栏时按照 the documentation 的建议覆盖了 Activity 中的 onSupportNavigateUp 可能是相关的。覆盖的方法如下:

override fun onSupportNavigateUp(): Boolean =
        findNavController(R.id.nav_host).navigateUp(appBarConfiguration)
                || super.onSupportNavigateUp()

在我的例子中,无法为 return 过渡设置动画是因为 Glide 正在加载我正在 returning 的片段中的图像。

我按照 this answer 中的建议添加了一个侦听器,它解决了问题。

我将投票结束这个重复的问题,虽然我一开始没有意识到这是问题所在,但解决方案是一样的。