我已按照文档使用新的Navigation组件实现共享视图转换,但它无法正常工作。这就是我所拥有的:
片段A具有调用片段B的代码
val extras = FragmentNavigatorExtras(
taskNameInput to "taskName")
findNavController().navigate(R.id.action_aFragment_to_BFragment,
null), // Bundle of args
null, // NavOptions
extras)
看一下布局,id的转换名称设置如下:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/taskNameInput"
android:transitionName="taskName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...
然后FragmentB在布局中有以下视图:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/taskNameInput"
android:transitionName="taskName"
android:layout_width="0dp"
android:layout_height="wrap_content"
...>
从fragmentA转到fragmentB时,将播放输入动画,但不播放sharedView转换。任何线索?谢谢
将sharedTransition设置为FragmentB时缺少,可以在onCrateView()中完成,如下所示:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(R.transition.move)
return inflater.inflate(com.meanwhile.flatmates.R.layout.fragment_b, container, false)
}
您还需要创建事务文件move.xml:
<transitionSet>
<changeBounds/>
<changeTransform/>
<changeClipBounds/>
<changeImageTransform/>
</transitionSet>
在这篇文章的时候,它没有写在新导航组件的文档中,但这只是旧的做法。由于导航组件为进入/退出转换做了一些魔术,我期望对共享视图进行更多操作。无论如何,添加这些行并不是什么大不了的事。