1. 程式人生 > >Android學習路線(二十一)運用Fragment構建動態UI——創建一個Fragment

Android學習路線(二十一)運用Fragment構建動態UI——創建一個Fragment

動態 app idt 文檔 部分 roi 現實 調用 android學習

你能夠把fragment看成是activity的模塊化部分。它擁有自己的生命周期,接受它自己的輸入事件,你能夠在activity執行時加入或者刪除它(有點像是一個“子activity”。你能夠在不同的activity中重用它)。本課將向你展示怎樣使用Support Libaray繼承 Fragment 類來讓你的應用能夠兼容正在執行Android 1.6的設備。

Demo下載:http://download.csdn.net/detail/sweetvvck/7757891

提示: 假設你決定你的應用需求的最低API級別是11或者更高,那麽你不須要使用Support Library,你能夠直接使用包括Fragment類的平臺相關的APIs。

本課主要重點是使用Support Library的APIs。這和已經包括了Fragment類的平臺版本號的差別是使用了一個指定的包簽名以及一些略微不同的API名稱。

在你開始這堂課之前,你必需要設置好你的項目,讓他使用Support Library。假設你之前沒有使用過Support Library。跟著Support Library Setup 文檔來設置你的項目使用v4庫。你也能夠使用v7 appcompat 庫讓你的應用activity可以使用action bar,它可以兼容到Android 2.1 (API level 7) 而且相同包括Fragment APIs。

創建一個Fragment


要創建一個Fragment,首先繼承Fragment 類。然後覆蓋基本的生命周期方法來插入了你的應用邏輯,類似你在Activity 類中所做的。

創建一個Fragment 與activity的一個不同點是,你必須使用onCreateView() 回調方法來定義布局。其實。你僅僅須要覆蓋這一個回調方法就行讓這個fragment工作。以下是一個簡單的fragment指定布局的樣例:

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須要實現其它的回調方法。這樣就行同意你在它在actvity中被加入或移除時管理它的狀態,就像是activity切換時它的生命周期狀態。比如,當activity的onPause() 方法被調用。全部它內部的fragment都會收到onPause()方法的回調。

很多其它關於fragment生命周期以及回調方法的信息,請查看Fragments 開發向導。

使用XML向activity中加入一個fragment


因為fragment是可重用的,模塊化UI組件。它的每一個實例都必須和一個父FragmentActivity關聯。你能夠通過在你的activity的XML布局文件裏定義fragment來獲取這個關聯。

提示: FragmentActivity 是在Support Library中提供的特殊的activity,用於處理在低於API級別為11的系統上使用fragment。假設你支持的最低系統版本號的API級別是11或者更高。那麽你能夠直接使用普通的Activity

以下是一個在大屏設備布局上加入了兩個fragment的樣例。

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中應用這個布局。

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

假設你使用的是v7 appcompat library,你的activity中應該要使用ActionBarActivity。它是FragmentActivity 的子類(很多其它信息。請查看Android學習路線(七)設置Action Bar)。

提示: 當你在activity的XML布局文件裏加入一個fragment時,你不能再執行時移除這個fragment。

假設你希望在用戶交互中隱藏於現實你的fragment,你就必須在activity第一次啟動時將fragment加入到activity中,在下堂課中會講到。

Android學習路線(二十一)運用Fragment構建動態UI——創建一個Fragment