在上一篇博客《TabHost选项卡的实现(一):使用TabActivity实现》中,讲解了如何使用TabActivity创建管理选项卡,但是,通过TabActivity创建选项卡的方式已经不再推荐使用,Android3.0之后推出Fragment,并推荐我们使用Fragment来实现标签页。关于Fragment的使用,可以参考我之前的几篇博文:

1. Fragment学习(一) :生命周期

2. Fragment开发实战(一)

3. Fragment学习(二): 管理Fragment和Fragment通讯

4. Fragment开发实战(二)

如果已经对Fragment很了解了,那接下来,我们介绍,如何使用Fragment来实现TabHost,效果图如下:

开发过程:

首先,我们需要定义一个Activity,该Activity管理了社会新闻、生活新闻、娱乐新闻、军事新闻这四个子布局,也就是Fragment。我们先定义该Activity的布局界面:

main_activity.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6.  
  7. <LinearLayout
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:orientation="horizontal" >
  11.  
  12. <TextView
  13. android:id="@+id/tb1"
  14. android:layout_width="0dip"
  15. android:layout_height="wrap_content"
  16. android:layout_weight="1"
  17. android:gravity="center"
  18. android:text="社会新闻" />
  19.  
  20. <TextView
  21. android:id="@+id/tb2"
  22. android:layout_width="0dip"
  23. android:layout_height="wrap_content"
  24. android:layout_weight="1"
  25. android:gravity="center"
  26. android:text="生活新闻" />
  27.  
  28. <TextView
  29. android:id="@+id/tb3"
  30. android:layout_width="0dip"
  31. android:layout_height="wrap_content"
  32. android:layout_weight="1"
  33. android:gravity="center"
  34. android:text="娱乐新闻" />
  35.  
  36. <TextView
  37. android:id="@+id/tb4"
  38. android:layout_width="0dip"
  39. android:layout_height="wrap_content"
  40. android:layout_weight="1"
  41. android:gravity="center"
  42. android:text="军事新闻" />
  43. </LinearLayout>
  44.  
  45. <LinearLayout
  46. android:id="@+id/content"
  47. android:layout_width="fill_parent"
  48. android:layout_height="fill_parent"
  49. android:orientation="vertical" >
  50. </LinearLayout>
  51.  
  52. </LinearLayout>

我们可以看出,程序使用四个TextView代表了效果图上的四个Tab标签页,在实际的开发中,我们可以为该标签做一些效果,使其更加美观,此处介绍不再详细介绍。

在页面布局的下面,我们定义了一个id为content的LinearLayout布局,该布局负责动态替换Fragment的布局。

接下来,我们定义四个Fragment,每个Fragment管理一个子布局,因为Demo里每个Fragment都相似,此处只贴出一个Fragment1.java的代码:

  1. package com.chen.yuan.fragment;
  2.  
  3. import com.chen.yuan.R;
  4.  
  5. import android.app.Fragment;
  6. import android.os.Bundle;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10.  
  11. public class Fragment1 extends Fragment
  12. {
  13. @Override
  14. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
  15. {
  16. return inflater.inflate(R.layout.fragment1, null);
  17. }
  18. }

该Fragment管理的布局文件为fragment1.xml,我们根据需要定义布局内容:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. >
  7.  
  8. <TextView
  9. android:id="@+id/textView1"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:text="社会新闻"
  13. android:textColor="#ff00ff"
  14. android:textSize="20sp"
  15. android:layout_marginTop="20dp"
  16. android:layout_gravity="center_horizontal"
  17. />
  18.  
  19. </LinearLayout>

四个标签页,对应于四个Fragment,而Fragment应该归于Activity管理,我们使用Fragment动态的管理Fragment:

  1. public class MainActivity extends Activity implements OnClickListener
  2. {
  3. private TextView tv1 = null;
  4.  
  5. private TextView tv2 = null;
  6.  
  7. private TextView tv3 = null;
  8.  
  9. private TextView tv4 = null;
  10.  
  11. private FragmentManager fm = null;
  12.  
  13. private FragmentTransaction ft = null;
  14.  
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState)
  17. {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20.  
  21. tv1 = (TextView) findViewById(R.id.tb1);
  22. tv2 = (TextView) findViewById(R.id.tb2);
  23. tv3 = (TextView) findViewById(R.id.tb3);
  24. tv4 = (TextView) findViewById(R.id.tb4);
  25.  
  26. tv1.setOnClickListener(this);
  27. tv2.setOnClickListener(this);
  28. tv3.setOnClickListener(this);
  29. tv4.setOnClickListener(this);
  30.  
  31. fm = getFragmentManager();
  32. ft = fm.beginTransaction();
  33.  
  34. ft.replace(R.id.content, new Fragment1());
  35. ft.commit();
  36. }
  37.  
  38. @Override
  39. public void onClick(View v)
  40. {
  41. ft = fm.beginTransaction();
  42. switch (v.getId())
  43. {
  44. case R.id.tb1:
  45.  
  46. ft.replace(R.id.content, new Fragment1());
  47.  
  48. break;
  49. case R.id.tb2:
  50. ft.replace(R.id.content, new Fragment2());
  51. break;
  52. case R.id.tb3:
  53. ft.replace(R.id.content, new Fragment3());
  54. break;
  55. case R.id.tb4:
  56. ft.replace(R.id.content, new Fragment4());
  57. break;
  58.  
  59. default:
  60. break;
  61. }
  62. ft.commit();
  63. }
  64. }

代码具体啥意思,我就不再说明了,建议先学会Fragment的基本使用再看该例子,很简单。

代码下载地址免费: http://download.csdn.net/detail/zuiwuyuan/7986609

TabHost选项卡的实现(二):使用Fragment实现的更多相关文章

  1. 【Android 应用开发】Android - TabHost 选项卡功能用法详解

    TabHost效果图 : 源码下载地址 : http://download.csdn.net/detail/han1202012/6845105        . 作者 :万境绝尘  转载请注明出处  ...

  2. Android - TabHost 选项卡功能用法详解

    TabHost效果图 : 源码下载地址 : http://download.csdn.net/detail/han1202012/6845105        . 作者 :万境绝尘  转载请注明出处  ...

  3. Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡

     <Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡> 之前基于github上的第三方开源控件ViewPagerIndicator的UnderlinePa ...

  4. Android系列之Fragment(二)----Fragment的生命周期和返回栈

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. 【转】【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法

    原始地址:http://blog.csdn.net/yangyu20121224/article/category/1431917/1 由于TabActivity在Android4.0以后已经被完全弃 ...

  6. fragment做成选项卡,tab效果。 fragment+RadioGroup

    fragment做成选项卡,tab效果. fragment+RadioGroup from://http://blog.csdn.net/zimo2013/article/details/122393 ...

  7. TabHost选项卡的实现(一):使用TabActivity实现

    一. TabHost的基本开发流程 TabHost是一种非常实用的组件,可以很方便的在窗口上防止多个标签页,每个标签页相当于获得了一个外部容器相同大小的组件摆放区域. 我们熟悉的手机电话系统" ...

  8. Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信

    以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3360938.html 如新浪微博下面的标签切换功能,我以前也写过一篇博文(http:/ ...

  9. android学习--TabHost选项卡组件

    TabHost是一种非常有用的组件,TabHost能够非常方便地在窗体上放置多个标签页,每一个标签页获得了一个与外部容器同样大小的组件摆放区域.在手机系统的应用类似"未接电话".& ...

随机推荐

  1. vue学习之组件(component)(一)

    组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下, ...

  2. 从0开始学习 GitHub 系列之「02.加入 GitHub」

    转载地址: http://blog.csdn.net/googdev/article/details/52787586 看完昨天的文章「从0开始学习 GitHub 系列之「初识 GitHub」」估计不 ...

  3. docker.[5] 网络配置-1

    docker[5] 网络配置-1 执行 ifconfig 可以看到有一个 docker01 ,这个其实就是容器的虚拟网桥,在执行指令:brctl show(如果该指令不能执行,请先安装: yum -y ...

  4. SDUT-3402_数据结构实验之排序五:归并求逆序数

    数据结构实验之排序五:归并求逆序数 Time Limit: 50 ms Memory Limit: 65536 KiB Problem Description 对于数列a1,a2,a3-中的任意两个数 ...

  5. Effective Modern C++:08调整

    41:针对可复制的形参,在移动成本低且一定会被复制的前提下,考虑将其按值传递 class Widget { public: void addName(const std::string& ne ...

  6. JS中获取URL的参数的方法

    这里,我学习的是使用正则的方法来获得URL的参数 函数的方法如下: <a href="www.baidu.com">百度</a> <script sr ...

  7. 帮助你构建云服务的开源平台:openstack

    from:http://os.51cto.com/art/201205/336386_all.htm 概念架构 3-5 OpenStack Compute服务架构 点评:从openstack的能力来看 ...

  8. PHPCMS快速建站系列之类别调用及类别显示页面

    在需要调用类别的地方,比如列表页,首先写循环前面写上一句: <?php $TYPE = getcache('type_content','commons');?> 这句就是把类别缓存加载进 ...

  9. phpexcel使用说明2

      转自:http://serisboy.iteye.com/blog/1928139 首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPE ...

  10. 【NS2】trace 文件格式(转载)

    本文档是对 http://nsnam.isi.edu/nsnam/index.php/NS-2_Trace_Formats > 的翻译. 译注:本文描述的无线格Trace格式已经有些陈旧,现在一 ...