你可以認為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不同的是,Fragment在onCreateView()回調函數中定義自己的布局。實際上,我們只要在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中,下面的章節將會講到。
文章列表
留言列表