FragmentTabHost的基本使用(一)

FragmentTabHost,一个很常用的控件。初次接触时,在GOOGLE上找了一些博客,看了些例子,被复杂的结构和很多没接触过的函数弄晕了头。所以自己尝试在那些例子上简化一些,只做FragmentTabHost 最基本的界面功能。

源码下载地址1地址二

 

FragmentTabHost继承的机构

java.lang.Object 

android.view.View

   ↳android.view.ViewGroup

          ↳android.widget.FrameLayout

                   ↳android.widget.TabHost

                            ↳android.support.v4.app.FragmentTabHost

 

 

 

一、项目效果

 

image

 

 

二、项目结构图

image[23]

 

 

三、Main.Xml

FragmentTabHost本身是一个控件,而不是Activity。这个Main.xml是整个Activity需要的。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    

<!-- android.support.v4.app.FragmentTabHost 来自android.support.v4.jar的扩展包-->

    <android.support.v4.app.FragmentTabHost

        android:id="@android:id/tabhost"

        android:layout_width="match_parent"

        android:layout_height="wrap_content" >



        <FrameLayout

            android:id="@android:id/tabcontent"

            android:layout_width="0dp"

            android:layout_height="0dp"

            android:layout_weight="0" />

    </android.support.v4.app.FragmentTabHost>



    

    

    <!-- 这个 FrameLayou和上一个 FragmentTabHost 在 xml的位置决定了  界面里 Tab的位置是在上面的 -->

    <FrameLayout

        android:id="@+id/realtabcontent"

        android:layout_width="match_parent"

        android:layout_height="0dip"

        android:layout_weight="1" />



</LinearLayout>

 

四、三个 Fragment 的界面(这里之贴出一个,另外两个和这个一样。)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    

    <TextView 

        android:id="@+id/textview"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="第一个Fragment"

        android:textSize="30sp"/>



</LinearLayout>

 

 

五、主Activity,MainTabActivity.java:

package com.example.thealarmclock;



import com.example.tabhost.FirstFragment;

import com.example.tabhost.SecondFragment;

import com.example.tabhost.ThreeFragment;



import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

import android.support.v4.app.FragmentTabHost;

import android.view.Window;

import android.widget.TabHost.TabSpec;



public class MainActivity extends FragmentActivity

{



    /**

     * 定义一个 FragmentTabHost

     */



    private FragmentTabHost mTabHost = null;



    protected void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.layout_main);



        // FragmentTabHost的setup方法

        // public void setup (Context context, FragmentManager manager, int

        // containerId)

        mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);

        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); // 这里需要传人的是是Fragment对应的id,getSupportFragmentManager()的方法返回一个FragmentManager



        /*

         * newTabSper传入的参数是String类型的,作用是标签。 setIndicator有三个复写函数

         * 

         * setIndicator(CharSequence label) 指定 "标签" 作为 选项卡的指示器,

         * setIndicator(View view) 指定 一个 View 作为 选项卡的指示器

         * setIndicator(CharSequence label, Drawable icon) 同时指定 标签和 图标 作为

         * 选项卡的指示器。

         * 

         * 这里为了更简单,我只传入了 一个文本。

         * 

         * addTab传人的三个参数, addTab(TabHost.TabSpec tabSpec, Class<?> clss,

         * Bundleargs)

         */

        TabSpec tabSpec = mTabHost.newTabSpec("alarmClock").setIndicator("闹钟");

        mTabHost.addTab(tabSpec, FirstFragment.class, null);



        tabSpec = mTabHost.newTabSpec("stopWatch").setIndicator("秒表");

        mTabHost.addTab(tabSpec, SecondFragment.class, null);



        tabSpec = mTabHost.newTabSpec("timer").setIndicator("计时器");

        mTabHost.addTab(tabSpec, ThreeFragment.class, null);



    }



    protected void onDestroy()

    {

        // TODO Auto-generated method stub

        super.onDestroy();



        // 把mTabHost赋值为null。

        mTabHost = null;

    }

}

 

六、Fragment的界面对应的java FirstFragment.java(另外两个和这个一样。)

package com.example.tabhost;



import com.example.thealarmclock.R;



import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;



public class FirstFragment extends Fragment

{

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

    {



        //fragment_1,这个java对应的布局文件

        

        return inflater.inflate(R.layout.fragment_1, null);

    }

}

你可能感兴趣的:(Fragment)