你可以認為Fragment作為Activity的一個模塊部分,有它自己的生命周期,獲取它自己的事件,並且你可以在Activity運行的時候添加或者移除它(有點像你可以在不同的Activity中重用的一個”子Activity“)。這節課程講述如何使用Support Library繼承Fragment類,所以你的應用程序仍然是兼容運行的系統版本低於Android1.6的設備。
注意:如果你決定你的應用要求的最低的API級別是11或者更高,你不需要使用Support Library,反而能使用Frameword內的Fragment和相關API。要注意,這節課程主要講使用Support Library的API,它使用特殊的包名,並且有些時候和包含在平台中版本API的名稱略有不同。
在你開始這節課程之前,你必須配置你的Android項目使用Support Library。如果之前你沒有使用過Support Library,遵照Support Library Setup文檔,配置你的項目使用v4 Library。然而,你也能包含在你的Activity中Action Bar
創建Fragment類
—————————————————————————————————————————————————————————————
為了創建一個Fragment的一點不同是,你必須使用onCreareView()回掉方法來定義布局。事實上,這是為了運行一個Fragment你需要的唯一回調方法。例如,下面是一個簡單的Fragment,它指定了自己的布局:
[java]
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);
}
} <span style="font-family:'Calibri Light',sans-serif; font-size:10pt; line-height:16px; background-color:transparent; color:windowtext"> </span>
和Activity一樣,Fragment應該實現其它的生命周期方法,來允許你在它從Activity中被添加或刪除的時候,和Activity在它的生命周期狀態之間轉換的時候,管理它的狀態。例如,當Activity的onPause()方法被調用,任何在這個Activity中的Fragment也調用onPause()。
使用XML向Activity中添加Fragment
—————————————————————————————————————————————
然而Fragment是可重用的,模塊化UI組建,Fragment類的每個實例必須和一個父FragmentActivity相關聯。你能通過在你的Activity的XML布局文件中定義每個Fragment,來完成這樣的關聯。
注意:FragmentActivity是Support Library中一個特殊的Activity,被提供來處理在系統版本小於API Level 11的Fragment。如果你支持的最低的系統版本是API Level 11或者更高,那麼你可以使用通常的Actvity。
這裡是示例布局文件,它向一個設備屏幕被認為是“large"的Activity中(在目錄名稱中通過large限定符指定),添加了兩個Fragment。
/res/layout-large/news_articles.xml
[html]
<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應用這個布局:
[java]
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的一個子類(更多信息查閱Adding the Action Bar)。
注意:當你通過在XML布局文件中定義Fragment的方式,向Activity布局中添加一個Fragment的時候,你不能在運行時移除這個Fragment。如果你計劃在用戶交互的時候移入和移除你的Fragment,你必須在Activity開始的時候向這個Activity中添加這個Fragment,如在下一節課程中所講的。