原文地址:http://mobile.51cto.com/aprogram-448443_1.htm
Fragment是google由3.0开始加入SDK的界面解决方案。
后续由谷歌团队维护并发行了support包以支持低版本SDK来使用Fragment。
谁在使用Fragment
- 网易新闻
- 网易云音乐
- 百度音乐
- 多米
- 豌豆荚
- 小米app
- Path
- Fuubo
- 自动化堆栈管理,所以返回键可以删除动态添加的Fragment,最后销毁Activity,无需做过多判断
- 集成ActionBar的标签,可以替代TabHost,ActivityGrounp,与谷歌设计风格紧密结合
- 布局更加模块化.与原Activity中的Layout分块化,VCBase的分块化道理相同
- 灵活准确的生命周期去管理当前View的状态记录以及横竖屏处理
- Fragment管理的View,可同时使用在Phone和Pad上,一份代码两份机器,可重用性高
- Is a View, More than View
- 可以从startActivityForResult中接收到返回结果,但是View不能
- 唯一Id标识,可以从FragmentManager中获取id对应的Fragment
与其说是Fragment的缺点,不如说是每个应用程序模块之间的通讯都面临地耦合问题
- Fragment之间的通讯依赖Activity使用接口管理并通知
1.使用接口,让Activity扮演管理角色,负责分发消息到该窗口的子View
该方案的缺点
- 不方便使用单元测试
- 随着应用功能的增加,需要监听的事件越来越多,导致越来越多的接口声明以及绑定
该方案的缺点
- 不方便单元测试,需要实例化Intent,填装Intent的数据,实现Broadcast receivers以及再次提取Intent中的数据
- receiver中不可做耗时操作,因为reciver是限时进程,10秒后会被系统kill掉,如果需要做耗时操作,需另外启Service来完成
- 消息订阅者:Activity or Fragment等订阅类注册自己到EventBus中
- 消息发布者:只负责发布消息以及消息包装数据到EventBus
- 回调基于命名约定以及消息包装对象
- 方便的单元测试
其实按照MVC的思想,Activity就真正的变成了Controler,
Activity中不涉及任何的业务逻辑的代码,只负责分发消息到不同的子View(Fragment)。
如果希望整个应用只有一个Activity,就需要再抽象出一层Controller,负责处理Activity与其子Controller的通讯
相关下载
- EventBus项目托管
- EventBus-PPT
- [otto项目托管](https://github.com/square/otto
- otto-demo
【Android|Android Fragment】 我们直接看代码吧,因为表达能力还训练,加上有点懒 ^_^