Fragment 的现在以及未来,现在未来,所以一直以来,Fragm
Fragment 的现在以及未来,现在未来,所以一直以来,Fragm
大家还记得 Fragment 是什么时候发布的吗?在 2011 年 Google 发布 Android 3.0,伴随着 API 11 推出了 Fragment 组件,最初 Fragment 是为了优化 Android 平板页面结构而推出的,不幸的是 Android 平板现在几乎夭折了,连 Google 都放弃了 Android 平板的研发。
所以一直以来,Fragment 处于一种很尴尬的地位,API 难用、坑很多、生命周期难管理,所以当初有人提出 Activity 应该采取单 Activity + 多 Fragment 的结构开发时,很多人都持否定态度,不过最近 Google Play 也改成了这种结构,日常使用体验也还好。
不过自从 Android 平板上夭折之后,Fragment 的作用越来越向一个微型 Activity 发展,Activity 有什么方法 Fragment 中就要对应添加什么方法,发向 Activity 的事件回调也要向 Fragment 中发一遍。最初的想法是想 Fragment 解决 Activity 页面臃肿以及不灵活的问题,但是没想到如今 Fragment 变成了 Activity。
针对目前存在的问题,官方提出了重新设计 Fragment 的计划,并提出了以下两个目标:
将 Fragment 迁移到一个聚焦 API 层面的世界,并具有可预见、完善的表现。
兼容目前的功能
在未来的某个时间的,Google 会发布 Fragment 2.0,会添加一些新的 API 供大家使用,所以作为开发者的我们,需要密切关注正在使用的 Fragment API 中哪些被打上了弃用的标签,因为在 Fragment 2.0 发布之后,这些 API 会逐步变得不可用。
现在的 Fragment
在目前的 1.1.0 版本中,还提供了 FragmentFactory 帮助我们自定义 Fragment 的实例化。之前我们可能会有一个疑问:为什么 Fragment 需要使用 setArguments 来传递参数,而不可以直接从 Fragment 的构造方法传递参数?答案很简单,会数据丢失。
因为例如当我们反转屏幕的时候,Activity 会销毁重建,当前 Activity 持有的 Fragment 会通过 FragmentManager 重建,但 FragmentManager 只会调用 Fragment 默认的构造方法重建,所以我们通过自定义构造方法传递的参数就会丢失。
现在我们可以通过 FragmentFactory 来自定义的实例化,就可以避免上述问题的发生。
自定义 FragmentFactory 之后,需要在 onCreate 之前给 FragmentManager 提前赋值。
在 Fragment 1.2.0 版本中,增加来新的 FragmentContainerView 来替代之前使用的 和 标签。FragmentContainerView 在 Fragmnet 出现、消失的动画上面增加了 Z 轴上的效果。
未来的 Fragment
最后官方还期望可以整合 Fragment 和 Fragment‘s View 的生命周期,提供更方便的状态管理。
其实在我看来之前 Fragment 之所以难用,是因为当时设计它的原因是基于平板模式所设计的,如今 Google 移除来 support 引入来全新的 AndroidX,将主要 API 的更新脱离 Android 版本的更新,势必会加快 API 的更新迭代速度,向着更快、更方便的开发体验前进,而且我也预感 Android 会在未来 1-2 年内会有重大的变化和突破,可以提供给用户媲美 iOS 的使用体验。所以抓紧上车,学就对了!
明天周末暂停更新,下周一我们继续为大家分享 Android Dev Summit 中有趣的内容!没关注的小伙伴记得关注我以及我的公众号【Android丨Kotlin】!如果觉得这些文章有点意思,记得分享转发评论点赞鸭!
我是 wanbo 大家加油!
作者:wanbo
用户评论