TabActivity,LocalActivityManager,TabHost,TabWidget深度分析(一)
本人原创,转载请注明:http://blog.csdn.net/fzh0803/archive/2011/06/21/6559081.aspx
TabAcitivity继承自AcitivtyGroup,AcitivityGroup的主要作用是创建一个LocalActivityManger,然后把activity的onCreate等事件传递给LocalActivity来处理,作用仅此而已,非常简单。
TabActivity真正重要的包括三部分,TabHost,TabWidget,LocalActivityManager.
TabHost主要是面向用户的接口,它的主要作用就是添加tab,用TabSpec来完成一个完整的tab的抽象(包括标签及其内容),一个string 类型的tag,这个tag用来标识一个tab,比如在退出程序时记录当前是哪个tab以便在再次进入的时候显示退出前显示的tab,它最重要的作用在于当用intent做为一个tab,即要把一个activity作为内容(content)嵌入(即embeded activity的概念)进去,成为一个tab的内容。
另外一个在TabHost中比较重要的部分就是,它主要运用了策略模式来完成标签和内容的抽象。
创建一个接口IndicatorStrategy,用一个方法createIndicatorView()来创建view(即在TabWidget上显示的标签),根据传入的参数不同,有LabelIndicatorStrategy,LabelAndIconIndicatorStrategy,ViewIndicatorStrategy三种。从名称即可以看出标签可以为一个只含有String,也可以含有String和一张图片,或者用户自定义的view等三种形式。
用接口ContentStrategy来抽象内容,有两个方法,getContentView()用来获取view,用tabClosed()来完成关闭的操作(比如用户点击其他tab,关闭当前的tab),按照内容的不同有ViewIdContentStrategy(给定一个layout id作为内容),FactoryContentStrategy(用户实现继承TabContentFactory,用createTabContent()来创建一个view作为内容),IntentContentStrategy(指定一个intent(即将一个activity作为内容))三种方式。内容的rootView是一个framelayout,切换是通过让选择的内容visible,让原来的view invisible实现的。在刚开始点击标签时创建view,在后面的时候直接用。所以将actvity作为内容时,如果创建需要很长时间的话可能会觉得迟钝(这里可能可以通过在创建tabhost的时候首先完成费时的操作这一办法减少迟钝感),而再后面切换的时候感觉很顺畅。
其中把activity内容是通过用LocalActvityManager来启动activity,并获取到一个window,再获取window的decorView来得到view,然后作为内容。代码如下:
final Window w = mLocalActivityManager.startActivity(mTag, mIntent);
final View wd = w != null ? w.getDecorView() : null;
TabActivity,LocalActivityManager,TabHost,TabWidget深度分析(一)相关推荐
- TabActivity,LocalActivityManager,TabHost,TabWidget深度分析(二)
本人原创,转载请注明:http://blog.csdn.net/fzh0803/archive/2011/06/21/6559239.aspx 上节分析了TabHost,这节接着分析TabWidget ...
- 2022-2028年中国交通建设PPP模式深度分析及发展战略研究报告(全卷)
[报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了PPP模式行业相关概述.中国PPP模式行业运行环境.分析了中国PPP ...
- 深度分析Java的枚举类型——枚举的线程安全性及序列化问题
点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...
- Memcached深度分析【zz】
Memcached深度分析 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能.关于这个东西,相信 ...
- XGBoost缺失值引发的问题及其深度分析
XGBoost缺失值引发的问题及其深度分析 2019年08月15日 作者: 李兆军 文章链接 3969字 8分钟阅读 1. 背景 XGBoost模型作为机器学习中的一大"杀器",被 ...
- 计算机科学与技术的深度研究,专业深度分析--计算机科学与技术.docx
专业深度分析 计算机科学与技术 计算机科学与技术 (一)学科概况 计算机科学与技术是研究计算机的设计与制造,以及信息获取.表示.存储.处理.传输和利用等方面的理论.原则.方法和技术的学科.它包括科学与 ...
- 全球及中国胶原蛋白肠衣行业深度分析及投资战略规划报告2022-2028年版
全球及中国胶原蛋白肠衣行业深度分析及投资战略规划报告2022-2028年版 [撰写单位]:鸿晟信合研究院 [报告目录]: 1 胶原蛋白肠衣市场概述 1.1 产品定义及统计范围 1.2 按照不同 ...
- get这款工具,不会机器学习也能轻松搞定深度分析
机器学习是一门多学科交叉专业,涵盖概率论知识.统计学知识.近似理论知识和复杂算法知识.机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法.通过计算机对数据的处理和对算法的运 ...
- linux hashmap,Java中对HashMap的深度分析与比较
Java中对HashMap的深度分析与比较 在Java的世界里,无论类还是各种数据,其结构的处理是整个程序的逻辑以及性能的关键.由于本人接触了一个有关性能与逻辑同时并存的问题,于是就开始研究这方面的问 ...
最新文章
- mybatis使用注解开发
- java数据和窗口怎么结合_卖jsp编程技巧的那个垃圾的所有实例的答案全部
- python中6 2是什么意思_python2.6中SyntaxError是什么错误?
- 编程软件python中的if用法-给Python初学者的一些技巧
- Python词云学习之旅
- python方差选择样本_两个样本方差比的分布(来自Python的实验)
- mysql残余文件的清理
- Java GUI应用程序关闭陷阱
- asp.net实现无刷新,无须AJAX
- Vscode 在 Linux 上配置远程开发
- oracle linux 版本 uek,在运行 Oracle Linux 7.1 UEK3 或 7.2 或者 RHEL 7.1 或 7.2 的系统上,RDMA 服务无法启动...
- shiro身份验证失败捕获的异常对应信息
- MySQL基础_模糊查询—between and in is null <=>(安全等于)等关建字
- 算法笔记_045:币值最大化问题(Java)
- 用简单的语句讲解浏览器输入地址进入servlet原理
- matlab中 点到线的距离,点到空间直线的距离 | 学步园
- 一种pluntUML实时渲染图片的方法
- Chrome快捷键整理
- win7中怎么显示文件名后缀
- 依托智慧警务 打造城市公共安全防控新模式