Android 在fragment中使用tabhost

在fragment中使用tabhost關鍵點有兩個:android

(1),xml文件,TabWidget的id和放置tab對應內容的容器的id。app

(2),tabHost和設置的方式,由於類繼承fragment類(或子類),而不是Activity,更不是TabActivity。ide

主要代碼:佈局

xml文件:this

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/academic"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TabHost 
        android:id="@+id/tabhost"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >
            <!-- TabWidget 的 id 必須是這個‘@android:id/tabs’,不然會拋出錯誤 -->
            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:orientation="horizontal"
                 />
            <!-- tab對應內容的容器,id必須是‘@android:id/tabcontent’,不然會拋出錯誤 -->
            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_alignTop="@android:id/tabs"
                >
                
                <fragment
                    android:id="@+id/frag1"
                    android:name="com.herald.ezherald.academic.Fragment1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
                
                <fragment
                    android:id="@+id/frag2"
                    android:name="com.herald.ezherald.academic.Fragment2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
                
            </FrameLayout>
        
        </RelativeLayout>
        
    </TabHost>
    
</LinearLayout>

Java代碼:spa

Javapublic class AcademicFragment extends SherlockFragment implements OnItemClickListener, TabHost.TabContentFactory, TabHost.OnTabChangeListener {
    String text = null;
    LinearLayout layout;
    TabHost tabHost;
    
    public AcademicFragment()
    {
        text = "Default";
    }

    /* (non-Javadoc)
     * @see android.support.v4.app.Fragment#setArguments(android.os.Bundle)
     */
    @Override
    public void setArguments(Bundle args) {
        // TODO Auto-generated method stub
        super.setArguments(args);
        text = args.getString("text");
    }


    /* (non-Javadoc)
     * @see android.support.v4.app.Fragment#onCreate(android.os.Bundle)
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    /* (non-Javadoc)
     * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
     */
    // 這裏是最主要的部分
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        layout = (LinearLayout) inflater.inflate(R.layout.academic_activity_main, null);
        tabHost =(TabHost) layout.findViewById(R.id.tabhost);
        tabHost.setup();
        tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1").setContent(R.id.frag1));
        tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("tab2").setContent(R.id.frag2));
        
        tabHost.setCurrentTab(0); 
        tabHost.setOnTabChangedListener(this);
        return layout;
    }
    
     @Override 
     public void onTabChanged(String tabId) { 
            // TODO Auto-generated method stub 
      }

    @Override
    public View createTabContent(String tag) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub
        
    }
    
    
}

代碼解釋:code

Java代碼裏面涉及到了兩個fragment,就是普通定義的fragment,沒什麼特別的。xml

onCreateView() 方法裏是 TabHost 的主要部分,獲取TabHost的方法是先用 LayoutInflater抽象類獲取佈局對象,而後用佈局對象獲取TabHost,由於不是繼承Activity,因此不能直接用getViewById()。對象

別忘了 tabHost.setup()。blog

可能遇到的問題:

Q:tab佈局出來了,可是對應的內容不顯示

A:緣由極可能是xml佈局產生的的問題。尤爲注意TabWidget和tab對應內容的容器(本例是FrameLayout)。

相關文章
相關標籤/搜索