Навигация по Android: переходы между общими элементами не работают между фрагментами - PullRequest
0 голосов
/ 15 апреля 2019

Я следовал инструкциям здесь .

Вот мой код:

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>

А вот как я устанавливаю представление во второй (целевой фрагмент):

private val args: PostDetailsFragmentArgs by navArgs()

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    args.post?.let { post ->
        tv_title.text = post.title
        tv_body.text = post.title
    }
}

В обоих XML-файлах я определил:

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