Android fragments Android导航:共享元素转换在片段之间不起作用

Android fragments Android导航:共享元素转换在片段之间不起作用,android-fragments,android-animation,android-navigation,shared-element-transition,Android Fragments,Android Animation,Android Navigation,Shared Element Transition,我按照指示做了 这是我的密码: val navDirections = PostsListFragmentDirections.actionPostsListFragmentToPostDetailFragment(post) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { val animationExtras = FragmentNavigatorExtras( title to title.t

我按照指示做了

这是我的密码:

val navDirections = PostsListFragmentDirections.actionPostsListFragmentToPostDetailFragment(post)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   val animationExtras = FragmentNavigatorExtras(
      title to title.transitionName,
      body to body.transitionName
   )
   navigateWithAnimations(navDirections, animationExtras)
} else {
   navigateTo(navDirections)
}
navigateTo
navigateWithAnimations
是扩展功能:

fun Fragment.navigateTo(navDirections: NavDirections) {
    NavHostFragment.findNavController(this).navigate(navDirections)
}

fun Fragment.navigateWithAnimations(navDirections: NavDirections, extras: Navigator.Extras) {
    NavHostFragment.findNavController(this).navigate(navDirections, extras)
}
代码正在执行,但动画不起作用

这是nav_graph.xml

<fragment
   android:id="@+id/postsListFragment"
   android:name="PostsListFragment"
   android:label="PostsListFragment">
   <action          
      android:id="@+id/action_postsListFragment_to_postDetailFragment"
      app:destination="@id/postDetailFragment">
      <argument
         android:name="post"
         app:argType="Post"
         app:nullable="true"
         android:defaultValue="@null" />
   </action>
</fragment>
<fragment
   android:id="@+id/postDetailFragment"
   android:name="PostDetailsFragment"
   android:label="PostDetailFragment">
   <argument
      android:name="post"
      app:argType="Post"
      app:nullable="true"
      android:defaultValue="@null" />
</fragment>
在这两个XML文件中,我定义了:

android:transitionName="transition_title"
android:transitionName="transition_body"

您是否在第二个片段中建立了sharedElementEnterTransition属性?您必须在onCreate方法中执行以下操作:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    main = requireActivity() as MainActivity
    sharedElementEnterTransition = ChangeBounds().apply {
        duration = 750
        interpolator = AccelerateDecelerateInterpolator()
    }
    sharedElementReturnTransition = ChangeBounds().apply {
        duration = 750
        interpolator = AccelerateDecelerateInterpolator()
    }
}

换句话说,接收片段需要知道如何处理共享元素。

您是否在第二个片段中建立了sharedElementEnterTransition属性?您必须在onCreate方法中执行以下操作:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    main = requireActivity() as MainActivity
    sharedElementEnterTransition = ChangeBounds().apply {
        duration = 750
        interpolator = AccelerateDecelerateInterpolator()
    }
    sharedElementReturnTransition = ChangeBounds().apply {
        duration = 750
        interpolator = AccelerateDecelerateInterpolator()
    }
}

换句话说,接收片段需要知道如何处理共享元素。

有解决方案吗?我面临着同样的问题您使用的SDK版本是什么?有什么解决方案吗?我面临着同样的问题您使用的是什么SDK版本?