android - 导航组件的共享视图转换不起作用
问题描述
我已按照文档使用新的导航组件实现共享视图转换,但它不起作用。这就是我所拥有的:
片段 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 时,播放enter 动画,但不播放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>
在这篇文章的时候,新导航组件的文档中还没有写,但这只是旧的做法。由于导航组件为进入/退出转换做了一些神奇的事情,我期待为共享视图做更多的事情。无论如何,添加这些行并不是什么大不了的事。
推荐阅读
- html - 使用自定义 css 覆盖 amp css - AMP wordpress
- git - 减少远程 git repo 的大小 (GitHub)
- ruby-on-rails - 当我在Rails5中使用React_component,Gem提供的View_Helper称为react-rails时,div的内容变为空而不重新加载
- javascript - 何时应该在 Javascript 中克隆变量?
- laravel - 如何在 vuejs(laravel) 中喜欢帖子后加载数据而不使用 vuejs 无限滚动刷新页面?
- angular - 使用 rxweb 验证器的@elementClass 时找不到名称为“userName”的控件
- javascript - 如何获得动态大小的 div 的新大小?
- java - 如何从 PreviousActivity 将 Intent Extras 传递给 Activity viewpager 中的多个片段
- java - 为什么 javax.tools.ToolProvider.getSystemTool(...) 用最宽的 Error 类而不是 ServiceConfigurationError 重新抛出?
- c - 使用蓝牙在 arduino 上接收带有字符的 2 字节数字时出现问题