創建一個片段
你可以把片段想象爲活動中的一個模塊化的部分,它有自己的生命週期,接受自己的輸入事件,並且在活動運行時,你能夠添加它或者移除它(有點像子活動,你能夠在不同的活動中使用它)。這篇文章講解的就是如何使用Support Library,然後繼承Fragment類,同時保證你的APP能夠在低版本運行。
注意:如果由於其它原因,你決定你的APP的最低API 版本是11或者更高,你就不用使用Support Library,直接使用系統裏面的Fragment 類和相關的API.但是請注意,這個文章講的是使用Support Library裏面的APIS,它有個特定的包簽名,並且少量API名字跟機器本身的API名字不同。
創建一個片段類
要創建一個片段類,就要繼承Fragment類並複寫它的關鍵的生命週期方法來插入你的APP 邏輯,跟創建一個活動類似。
不同的是當創建一個Fragment時,你必須使用onCreateView()回調方法來定義它的佈局。事實上,這是讓一個片段運行唯一必須實現的回調方法。下面是一個簡單的片段,它指定了自己的佈局。
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);
}
}
跟活動一樣,一個片段應該實現其它生命週期回調方法,這樣才能在添加它,移除它,以及活動自己的生命週期狀態切換時來管理片段自己的狀態。例如當活動的onPause()方法被調用時,任何在這個活動中的片段都會調用各種的onPause()方法。
更多關於片段生命週期和回調方法的講解見片段開發指南。
使用XML將一個片段添加到活動中去
由於片段是可以重複使用的,模塊中的UI組件,片段類的各個實例都必須跟父片段活動相關聯。你能夠通過將片段定義在活動的佈局XML文件裏面來實現這種聯繫。
注意:片段活動(FragmentActivity)是一個特殊的活動,它因爲有Support Library庫的支持,可以在系統版本低於API 11的機器上處理片段。如果最低系統版本是11或者更高,你能直接使用活動(Activity)。
如下是一個當設備屏幕很大的時候的佈局文件,它包含了兩個片段(目錄名字使用large限定詞)。
res/layout-large/news_articles.xml:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragmentandroid:name="com.example.android.fragments.HeadlinesFragment"
android:id="@+id/headlines_fragment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"/>
<fragmentandroid: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>
如下是活動對這個佈局文件的使用:
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);
}
}
注意:當你在佈局XML文件中定義片段時,在運行時,你不能移除這個片段。當你需要在用戶交互的時候將片段換入或者換出時,你必須在活動第一次開始時來添加片段,詳見下篇文章:創建活動的UI.