天天看點

【Android Training - 03】使用Fragments建立動态的UI [ Lesson 2 - 建立一個Fragment ]

Creating a Fragment

你可以把fragment當作activity的一部分,它有自己的lifecycle,它會接受自己的輸入事件。你可以在activity運作的時候增加或者拿掉fragment。(類似子activity,你可以在不同的activity中重用fragment)。這節課示範如何使用support library來建立一個繼承自 

Fragment

 的類。

Note: 如果你的app決定跑在Level 11或者更高的系統上,你不需要添加這個support library,你可以使用那個版本的系統自帶的API來實作。請注意這節課是專注于使用support library裡面的API,這裡面的API名稱與那些本身就包含這些功能的平台上的名稱有可能不一樣。

Create a Fragment Class [建立一個fragment類]

為了建立一個fragment,需要繼承 

Fragment

 類,然後重寫關鍵的lifecycle中的callback方法,類似Activity的寫法。

建立fragment,其中一個不同的地方是你必須使用 

onCreateView()

 的回調來定義Layout。實際上,這是使得fragment開始運作的唯一的callback。如下:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.ViewGroup;

public class ArticleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.article_view, container, false);
    }
}      

就想一個activity一樣,一個fragment應該實作一些其他的callback,這樣你可以操控當它添加到activity,從activity移除,或者activity在不同生命周期進行切換時fragment該做的動作。l例如,當activity的 

onPause()

 方法被呼叫時,所有在這個activity中的fragment也都會呼叫到 

onPause()

.方法。

更多關于fragment的lifecycle與callback的方法,請參考 Fragments 開發者指南。

Add a Fragment to an Activity using XML [使用XML添加fragment到activity]

因為fragment可以重用,是子產品化的元件,每一個fragment的執行個體都與父類

FragmentActivity

有依賴,你可以通過定義每一個fragment的XML來實作這樣的聯系。

Note: 

FragmentActivity

 是一個在Support Library中的特殊的activity,使用它來向Level 11以下的系統進行相容。如果你是在Level 11以上開發,則可以使用通常的 

Activity

.

這裡有一個layout的示例檔案,當裝置螢幕被認為是large級别時,它會添加了兩個fragment到一個activity中。

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>      

下面則示範了一個activity如何運用這個layout:

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);
    }
}      

Note:  當你通過定義一個layout XML的方式來添加fragment到activity時,你不可以在運作時移除這個fragment.如果你計劃在與使用者進行互動時對fragment進行載入與移除,你必須在activity第一次啟動時進行添加fragment,下一節課會講到。

學習自:http://developer.android.com/training/basics/fragments/creating.html

轉載請注明出自:http://blog.csdn.net/kesenhoo,謝謝!