今天明白了Tabhost嵌套和Tab里实现多个Activity的跳转原理,自己做了一个demo,先看看效果图:

源码 如下:

[java] view plaincopy
  1. (1) DoubleTabHost
  2. package yy.android.tab;
  3. import android.app.TabActivity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.widget.TabHost;
  7. public class DoubleTabHost extends TabActivity {
  8. /* 注意:
  9. * 对于TabHost、布局文件中必须包含
  10. * TabHost、TabWidget 、FrameLayout
  11. * 如果继承TabActivity,并且通过getTabHost()方法来获取TabHost
  12. * 那么三者的ID必须是android.R.id.tabhost、android.R.id.tabs、android.R.id.tabcontent
  13. * 如果继承Activity,可以通过findViewById来获取这三个组件,此时ID可自定义
  14. */
  15. @Override
  16. public void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.main);
  19. //获得TabHost
  20. TabHost mTabHost = getTabHost();
  21. //新建一个tab并设置它的,Tag,标题,图标,内容
  22. mTabHost.addTab(mTabHost.newTabSpec("YouTube").setIndicator(
  23. "YouTube",
  24. getResources().getDrawable(android.R.drawable.arrow_down_float)).setContent(
  25. new Intent(this, SubTab.class)));
  26. mTabHost.addTab(mTabHost.newTabSpec("Chrome").setIndicator(
  27. "Chrome",
  28. getResources().getDrawable(android.R.drawable.arrow_down_float)).setContent(
  29. new Intent(this, YActivityGroup.class)));
  30. mTabHost.setCurrentTab(0);//设置初始选中状态为第一个tab
  31. }
  32. }
  33. //
  34. (2)YTabDActivity
  35. package yy.android.tab;
  36. import android.app.Activity;
  37. import android.content.Intent;
  38. import android.os.Bundle;
  39. import android.view.View;
  40. import android.view.View.OnClickListener;
  41. import android.view.Window;
  42. import android.widget.Button;
  43. public class YTabDActivity extends Activity {
  44. @Override
  45. public void onCreate(Bundle savedInstanceState) {
  46. super.onCreate(savedInstanceState);
  47. setContentView(R.layout.normal);
  48. Button btn = (Button) findViewById(R.id.btn);
  49. btn.setOnClickListener(new OnClickListener() {
  50. public void onClick(View v) {
  51. // TODO Auto-generated method stub
  52. Intent intent = new Intent(YTabDActivity.this, SecondActivity.class).
  53. addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  54. //把一个Activity转换成一个View
  55. Window w =  YActivityGroup.group.getLocalActivityManager()
  56. .startActivity("SecondActivity",intent);
  57. View view = w.getDecorView();
  58. //把View添加大ActivityGroup中
  59. YActivityGroup.group.setContentView(view);
  60. }
  61. });
  62. }
  63. }
  64. //
  65. (3)YActivityGroup
  66. package yy.android.tab;
  67. import android.app.ActivityGroup;
  68. import android.content.Intent;
  69. import android.os.Bundle;
  70. import android.view.View;
  71. import android.view.Window;
  72. public class YActivityGroup extends ActivityGroup{
  73. /**
  74. * 一个静态的ActivityGroup变量,用于管理本Group中的Activity
  75. */
  76. public static ActivityGroup group;
  77. @Override
  78. protected void onCreate(Bundle savedInstanceState) {
  79. // TODO Auto-generated method stub
  80. super.onCreate(savedInstanceState);
  81. group = this;
  82. }
  83. @Override//按返回键时
  84. public void onBackPressed() {
  85. // TODO Auto-generated method stub
  86. //super.onBackPressed();
  87. //把后退事件交给子Activity处理
  88. group.getLocalActivityManager()
  89. .getCurrentActivity().onBackPressed();
  90. }
  91. @Override //从新获得焦点时
  92. protected void onResume() {
  93. // TODO Auto-generated method stub
  94. super.onResume();
  95. //把界面切换放到onResume方法中是因为,从其他选项卡切换回来时,
  96. //调用搞得是onResume方法
  97. //要跳转的界面
  98. Intent intent = new Intent(this, YTabDActivity.class).
  99. addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  100. //把一个Activity转换成一个View
  101. Window w = group.getLocalActivityManager().startActivity("YTabDActivity",intent);
  102. View view = w.getDecorView();
  103. //把View添加大ActivityGroup中
  104. group.setContentView(view);
  105. }
  106. }
  107. (4) SubTab
  108. package yy.android.tab;
  109. import android.app.Activity;
  110. import android.os.Bundle;
  111. import android.widget.TabHost;
  112. import android.widget.TabWidget;
  113. import android.widget.TextView;
  114. public class SubTab extends Activity {
  115. @Override
  116. public void onCreate(Bundle savedInstanceState) {
  117. super.onCreate(savedInstanceState);
  118. setContentView(R.layout.subtab);
  119. //获得TabHost
  120. TabHost mTabHost = (TabHost)findViewById(R.id.mytabhost);
  121. //当时通过findViewById来获得tabhost的而不是getTabHost获得的,在添加tab之前都需要setup
  122. mTabHost.setup();
  123. TabWidget tabWidget = mTabHost.getTabWidget();
  124. mTabHost.addTab(mTabHost.newTabSpec("湖人").setIndicator(
  125. "湖人").setContent(R.id.widget59));
  126. mTabHost.addTab(mTabHost.newTabSpec("热火").setIndicator(
  127. "热火").setContent(R.id.widget60));
  128. mTabHost.addTab(mTabHost.newTabSpec("雷霆").setIndicator(
  129. "雷霆").setContent(R.id.widget60));
  130. mTabHost.addTab(mTabHost.newTabSpec("凯尔特人").setIndicator(
  131. "凯尔特人").setContent(R.id.widget60));
  132. mTabHost.setCurrentTab(0);//设置初始时,第一个tab为选中状态
  133. int height =30;
  134. //        int width =45;
  135. //tabWidget.getChildCount()是tab个数
  136. for (int i =0; i < tabWidget.getChildCount(); i++) {
  137. /**设置高度、宽度,由于宽度设置为fill_parent,在此对它没效果 */
  138. tabWidget.getChildAt(i).getLayoutParams().height = height;
  139. //            tabWidget.getChildAt(i).getLayoutParams().width = width;
  140. /**设置tab中标题文字的颜色,不然默认为黑色 */
  141. final TextView tv = (TextView) tabWidget.getChildAt(i).findViewById(android.R.id.title);
  142. tv.setTextColor(this.getResources().getColorStateList(android.R.color.white));
  143. }
  144. }
  145. }
  146. /
  147. (5)SecondActivity
  148. package yy.android.tab;
  149. import android.app.Activity;
  150. import android.os.Bundle;
  151. public class SecondActivity extends Activity{
  152. @Override
  153. protected void onCreate(Bundle savedInstanceState) {
  154. // TODO Auto-generated method stub
  155. super.onCreate(savedInstanceState);
  156. setContentView(R.layout.group);
  157. }
  158. }
[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="yy.android.tab"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/icon" android:label="@string/app_name">
  7. <activity android:name=".DoubleTabHost"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. <activity android:name=".YActivityGroup"/>
  15. <activity android:name=".YTabDActivity"/>
  16. <activity android:name=".SubTab"/>
  17. <activity android:name=".SecondActivity"/>
  18. </application>
  19. <uses-sdk android:minSdkVersion="8" />
  20. </manifest>

//

  (1)main.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@android:id/tabhost" android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="@drawable/ch">
  6. <LinearLayout android:orientation="vertical"
  7. android:layout_width="fill_parent" android:layout_height="fill_parent">
  8. <TabWidget android:id="@android:id/tabs"
  9. android:layout_alignParentBottom="true" android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"/>
  11. <FrameLayout android:id="@android:id/tabcontent"
  12. android:layout_weight="1" android:layout_width="fill_parent"
  13. android:layout_height="fill_parent" />
  14. </LinearLayout>
  15. </TabHost>
  16. (2)group.xml
  17. <?xml version="1.0" encoding="utf-8"?>
  18. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  19. android:layout_width="match_parent"
  20. android:layout_height="match_parent"
  21. android:orientation="vertical" >
  22. <TextView
  23. android:id="@+id/text1"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:text="这是tab的第二个界面">
  27. </TextView>
  28. </LinearLayout>
  29. //
  30. (3)normal.xml
  31. <?xml version="1.0" encoding="utf-8"?>
  32. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  33. android:layout_width="match_parent"
  34. android:layout_height="match_parent"
  35. android:orientation="vertical" >
  36. <TextView
  37. android:id="@+id/text1"
  38. android:layout_width="wrap_content"
  39. android:layout_height="wrap_content"
  40. android:text="这是tab的第一个界面">
  41. </TextView>
  42. <Button android:id="@+id/btn"
  43. android:layout_width="wrap_content"
  44. android:layout_height="wrap_content"
  45. android:text="跳转 "/>
  46. </LinearLayout>
  47. //
  48. (4)subtab.xml
  49. <?xml version="1.0" encoding="utf-8"?>
  50. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
  51. android:id="@+id/mytabhost" android:layout_width="fill_parent"
  52. android:layout_height="fill_parent"
  53. android:background="@drawable/yt">
  54. <LinearLayout android:orientation="vertical"
  55. android:layout_width="fill_parent" android:layout_height="fill_parent">
  56. <!-- 注意FrameLayout\TabWidget标签的位置-->
  57. <FrameLayout android:id="@android:id/tabcontent"
  58. android:layout_weight="1" android:layout_width="fill_parent"
  59. android:layout_height="fill_parent" >
  60. <TextView
  61. android:id="@+id/widget59"
  62. android:layout_width="wrap_content"
  63. android:layout_height="wrap_content"
  64. android:text="苹果IOS?"
  65. android:layout_alignParentTop="true"
  66. android:layout_centerHorizontal="true"
  67. >
  68. </TextView>
  69. <TextView
  70. android:id="@+id/widget60"
  71. android:layout_width="wrap_content"
  72. android:layout_height="wrap_content"
  73. android:text="谷歌Android"
  74. android:layout_alignParentTop="true"
  75. android:layout_alignParentRight="true"
  76. >
  77. </TextView>
  78. </FrameLayout>
  79. <TabWidget android:id="@android:id/tabs"
  80. android:layout_alignParentBottom="true" android:layout_width="fill_parent"
  81. android:layout_height="wrap_content"/>
  82. </LinearLayout>
  83. </TabHost>

OK,就写到这里,有什么问题可以一起讨论!!!

Tabhost嵌套以及Tab中多个Activity跳转的实现相关推荐

  1. 用ActivityGroup解决TabHost中多个Activity跳转问题

    下面图片是测试程序的效果图          两个选项卡的实现      布局文件  main.xml   Xml代码   <?xml version="1.0" encod ...

  2. android activity跳转生命周期,Android中从一个Activity跳转到另一个Activity所经历的生命周期........

    凡是Android开发人员都知道"Activity"是非常重要的:对其该"Activity"生命周期相信大家也比较熟悉了. 这篇文章主要探讨的是"从一 ...

  3. Github项目解析(九)--实现Activity跳转动画的五种方式

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了在Activity ...

  4. Android -- 基础篇 -- Activity跳转动画的五种方式(下)

    上一篇文章中我们讲解了在Activity启动过程中获取组件宽高的五种方式.在Activity的启动过程中如果我们直接在生命周期方法中通过view.getWidth()或者是view.getHeight ...

  5. ActivityGroup中的子Activity创建Dialog:android.view.WindowManager$BadTokenException: U

    我们在ActivityGroup或者TabActivity中的子Activity创建Dialog若使用以下的代码 progressDialog = new ProgressDialog(XXX.thi ...

  6. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  7. oracle无法打开表的行集,Oracle错误ORA-22905:无法访问非嵌套表项中的行

    这是我写入的存储过程.在此proc中,"p_subjectid"是从前端传递的一组数字.Oracle错误ORA-22905:无法访问非嵌套表项中的行 PROCEDURE getsu ...

  8. php 嵌套while循环,PHP/SQL在嵌套while循环中替代db调用

    我的第一篇文章,尽可能地做到尽可能详尽,如果我弄错了某些东西,请提前道歉.我是PHP/SQL的新手,请耐心等待.我发现了几个有关循环内循环的类似问题,但我不确定这些解决方案适用于我的情况.PHP/SQ ...

  9. 如何通过 BAPI 更新 PO 采购订单中的 confirmation tab 中的 confirmation date.

    答案是 ME_CONFIRMATION_UPDATE .. 格式我稍后提供 果断上代码 , 这是在PO增强中的一段代码.获取修改信息的时候将自定义的增强TAB上的字段对应入Confirmation T ...

最新文章

  1. HBase保存的各个字段意义解释
  2. 深度学习中tensorflow框架的学习
  3. android视频闪退,安卓 app 视频闪退问题
  4. Prepare for Mac App Store Submission--为提交到Mac 应用商店做准备
  5. Perl中删除或替换字符串中特殊字符(如空格)的方法
  6. 洛谷P2888 [USACO07NOV]牛栏Cow Hurdles
  7. 关于抢红包的_关于抢红包现象的材料作文
  8. wpf绘制图片查看器
  9. Lena,Pepper等图像,图像处理必备资料。
  10. 抖音怎么发起挑战 发起挑战怎么玩
  11. 计算机软件职业资格注册,计算机软件职业资格证具体需要考什么科目
  12. 1004-史丰收速算
  13. 在Outlook中使用Notes功能的入门指南
  14. Android 高德地图自定义定位图标的显示
  15. 牙齿底部粉色原因-ECR(External cervical resorption)
  16. 计算机发展历史的感想
  17. 泰勒公式浅谈原理(转)
  18. Angelababy现身宋雨琦直播,不和传言不攻自破
  19. 名词解释:Web3 账户相关概念大梳理
  20. [Apache Maven Shade Plugin] [example] [001] 官方例子:includes-excludes

热门文章

  1. OpenCV+Qt+CMake安装+十种踩坑
  2. NGINX的几个应用场景
  3. ubuntu 16.04安装visual studio code 提示libnss3版本低:NSS = 3.26 is required
  4. [国家集训队]最长双回文串 manacher
  5. 解决VS2013卡顿现象,很有用
  6. 需求分析读书笔记(一)
  7. 非线程安全的HashMap 和 线程安全的ConcurrentHashMap
  8. 中断和异常,陷阱的区别和联系
  9. Spring Cloud 使用 FeignClient 启动报错
  10. flutter布局-8-animated_icons动画图片