文章出處

你可以認為fragment是Activity中模塊化的部分。Fragment有它自己的生命周期,接收它自己的輸入事件,并且你可以在Activity運行的時候添加或移除它(有點像可以被重用在不同Activity的"子Activity")。這個教程主要叫你怎么使用Support Library來繼承Fragment類,以便你的app可以兼容最低到Android 1.6的系統。

注意:如果你需要支持的API版本是11或更高,你就不必使用Support Library,你可以直接使用現有框架下的Fragment類。值得注意的是,這篇教程主要集中在怎么使用Support Library中的API。這些API使用特定的包簽名,并且他們的名稱跟直接包含這些API的平臺下的名稱稍有不同。

在你開始這篇教程前,你必須先設置你的Android 工程使用Support Library。如果你沒有使用過Support Library,那么你需要跟著Support Library Setup文檔設置你的工程使用v4 library。當然,你也可以包含action bar在你的Activity中,使用v7 appcompat library。v7 appcompat library 可以兼容Android 2.1(API level 7),而且它也有包含Fragment API。

 

我們的教程將下面的步驟進行講解:

1、創建Fragment類

2、使用XML將Fragment添加到Activity中

我們打算做一個簡單地做一個新聞客戶端。這個客戶端很簡單,點擊新聞標題,進而顯示新聞內容。我們將用一個Fragment來顯示顯示標題,用一個Fragment來顯示新聞內容。當點擊新聞標題時,新聞標題Fragment會被用于顯示新聞內容的Fragment所替換。在下面的教程中,你會了解到Fragment是如何創建的,以及如何用一個Fragment替換另一個。

創建Fragment類

為了創建Fragment,我們需要繼承Fragment類。跟Activity一樣,我們可以重寫跟自定義的Fragment生命周期相關的方法。

跟Activity不同的是,FragmentonCreateView()回調函數中定義自己的布局。實際上,我們只要在onCreateView()中定義Fragment布局,就可以使用Fragment了,這是唯一一個我們必須要實現的方法。舉個例子,下面我們將簡單地定義一個Fragment的布局(布局文件article_view.xml可以從文章下方的示例代碼中找)。

package com.bang.testfragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ArticleFragment extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        //在這里定義Fragment的布局
        return inflater.inflate(R.layout.article_view, container,false);
    }
}

跟Activity一樣,我們也可以重寫跟生命周期有關的回調函數(如onPause),以便使Fragment符合我們的需要。更詳細的信息可以慘遭Fragments開發指南.。

使用XML布局文件向Activity添加Fragment

因為fragment是可重用、模塊化的UI控件,每一個Fragment類的實例都必須跟一個父FragmentActivity關聯起來。你可以通過在你的activity的XML布局文件中定義每一個fragment實現他們之間的關聯。

注:FragmentActivity是Support Library中提供的特殊的Activity,它主要用來兼容在API level11之前的系統中fragment的使用問題。如果你需要支持的最低系統版本是API level11或更高,那么你可以使用普通的 Activity.

下面的布局文件定義了在屏幕比較大的情況下,如何添加兩個fragment到Activity上(在路徑名中帶有large的修飾符)

res/layout-large/news_articles.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <fragment android:name="com.example.android.fragments.HeadlinesFragment"
              android:id="@+id/headlines_fragment"
              android:layout_weight="1"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

    <fragment android:name="com.example.android.fragments.ArticleFragment"
              android:id="@+id/article_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

</LinearLayout>

建議:如果你想要了解更多如何兼容不同大小的設備的方法,可以看一下Supporting Different Screen Sizes.

package com.bang.testfragment;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_articles);
    }
}

然后,我們需要將這個布局文件應用到我們的Activity中。

如果你用的是v7 appcompat library,你的Activity應該繼承ActionBarActivity而不是FragmentActivity,因為ActionBarActivity是Fragment的子類。

注意:如果你通過XML布局文件添加fragment到Activity中的話,那么你就無法在運行時將fragment移除。如果你打算在用戶操作的時候插入或移除fragment,你就必須在activity一開始啟動的時候,將fragment添加到activity中,下面的章節將會講到。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()