Jetpack 里面的 Navigatiom 和原本的 viewPager 功能感觉差不多,有什么区别或优劣么?

回答·6
最热
最新
  • 一个是导航组件或者说框架。一个是 view,根据场景选择。
  • 本质就不一样吧!navigation 可以说是一个微型的路由功能的框架,viewgaper 只是一个控件,俩者的定位就不同
  • 一个是 controller,一个是 view,完全不相干的两个东西啊。举个例子给你,你要开店,首先🉐有一个开店指引,然后就是一堆的信息采集,还有开店成功和失败,你根据后台返回给你的状态确定用户是从指引到信息采集到提交审核,还是直接显示成功或失败,失败又可以定位到哪个信息采集失败了重新采集提交,这个流程 Navigation 很容易就做了,你换 viewpager 怎么搞?
  • viewpager 的切换页面很简单,只有 1-2,2-3 这样的切换动画,1 到 3 它的动画会经过 2,没法跨过去那个(你禁止滑动的话是没动画,但一般切换页面都设置动画),Navigatiion 对应的是 activity 的 intent 跳转,和 viewpager 要做的东西一样
  • navigate 只是一个辅助组件用于一些可视化的标签切换 viewpage 是一个页面控制器,但是很多默认的实现方式,这现在时代追求美观很实用,就会导致很多比较美丽和便捷的方式需要结合辅助性的组件完成 有这个没法比较优劣势,性质不一样; 只能这两个组件自己的优劣势是有的
  • 首先排除用 ViewPager 做画廊效果的情况,因为那是面向 View 的功能,咱们重点对比下都是采用 Fragment 作为页面的情况: 首先 ViewPager 多数情况下针对的是子页面之间的滑动切换,常见于主页面顶部 Tab 的切换,例如新闻咨询的分类页面,而 Navigation 针对的是不需要滑动效果且业务独立的主页面切换,例如微信底部的 Tab 切换。 此外,Navigation 是一个对 FragmentManager 进行了高级封装的导航组件,支持页面之间的安全类型参数传递,支持回退栈,而 ViewPager 也没有这些功能,他只是在 View 层级上对 Fragment 进行管理的视图组件。 最后,Navigation 估计开发者采用 Fragment 作为页面而不是 Activity,这一点直接从官方文档就可以看出来。