本人原创,转载请注明: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深度分析(一)相关推荐

  1. TabActivity,LocalActivityManager,TabHost,TabWidget深度分析(二)

    本人原创,转载请注明:http://blog.csdn.net/fzh0803/archive/2011/06/21/6559239.aspx 上节分析了TabHost,这节接着分析TabWidget ...

  2. 2022-2028年中国交通建设PPP模式深度分析及发展战略研究报告(全卷)

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了PPP模式行业相关概述.中国PPP模式行业运行环境.分析了中国PPP ...

  3. 深度分析Java的枚举类型——枚举的线程安全性及序列化问题

    点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...

  4. Memcached深度分析【zz】

    Memcached深度分析 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能.关于这个东西,相信 ...

  5. XGBoost缺失值引发的问题及其深度分析

    XGBoost缺失值引发的问题及其深度分析 2019年08月15日 作者: 李兆军 文章链接 3969字 8分钟阅读 1. 背景 XGBoost模型作为机器学习中的一大"杀器",被 ...

  6. 计算机科学与技术的深度研究,专业深度分析--计算机科学与技术.docx

    专业深度分析 计算机科学与技术 计算机科学与技术 (一)学科概况 计算机科学与技术是研究计算机的设计与制造,以及信息获取.表示.存储.处理.传输和利用等方面的理论.原则.方法和技术的学科.它包括科学与 ...

  7. 全球及中国胶原蛋白肠衣行业深度分析及投资战略规划报告2022-2028年版

    全球及中国胶原蛋白肠衣行业深度分析及投资战略规划报告2022-2028年版 [撰写单位]:鸿晟信合研究院  [报告目录]:    1 胶原蛋白肠衣市场概述 1.1 产品定义及统计范围 1.2 按照不同 ...

  8. get这款工具,不会机器学习也能轻松搞定深度分析

    机器学习是一门多学科交叉专业,涵盖概率论知识.统计学知识.近似理论知识和复杂算法知识.机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法.通过计算机对数据的处理和对算法的运 ...

  9. linux hashmap,Java中对HashMap的深度分析与比较

    Java中对HashMap的深度分析与比较 在Java的世界里,无论类还是各种数据,其结构的处理是整个程序的逻辑以及性能的关键.由于本人接触了一个有关性能与逻辑同时并存的问题,于是就开始研究这方面的问 ...

最新文章

  1. mybatis使用注解开发
  2. java数据和窗口怎么结合_卖jsp编程技巧的那个垃圾的所有实例的答案全部
  3. python中6 2是什么意思_python2.6中SyntaxError是什么错误?
  4. 编程软件python中的if用法-给Python初学者的一些技巧
  5. Python词云学习之旅
  6. python方差选择样本_两个样本方差比的分布(来自Python的实验)
  7. mysql残余文件的清理
  8. Java GUI应用程序关闭陷阱
  9. asp.net实现无刷新,无须AJAX
  10. Vscode 在 Linux 上配置远程开发
  11. oracle linux 版本 uek,在运行 Oracle Linux 7.1 UEK3 或 7.2 或者 RHEL 7.1 或 7.2 的系统上,RDMA 服务无法启动...
  12. shiro身份验证失败捕获的异常对应信息
  13. MySQL基础_模糊查询—between and in is null <=>(安全等于)等关建字
  14. 算法笔记_045:币值最大化问题(Java)
  15. 用简单的语句讲解浏览器输入地址进入servlet原理
  16. matlab中 点到线的距离,点到空间直线的距离 | 学步园
  17. 一种pluntUML实时渲染图片的方法
  18. Chrome快捷键整理
  19. win7中怎么显示文件名后缀
  20. 依托智慧警务 打造城市公共安全防控新模式

热门文章

  1. 【EntityFramework学习笔记】为什么要使用迁移
  2. Silverlight 用户代码未处理 TypeLoadException
  3. Sencha-命令-CMD(与Touch的结合运用)(官网文档翻译30)
  4. ASP.NET--窗体实现淡入淡出效果
  5. Java JavaFX 批量修改文件夹里面的文件的名字
  6. Spring中的Bean配置
  7. FPGA跨时钟域异步时钟设计的几种同步策略
  8. 艾伟:如何实现用返回值重载
  9. 币圈名利场,一场赤裸裸的狼人杀
  10. ELK 使用小技巧(第 5 期)