《Android》『Fragment』- Fragment 的基本用法(靜態載入)
《Android Developers 參考文獻》
《簡單介紹》
Fragment 是 Android 中一個很重要的主題,照字面翻,是『片段』的意思,它是一個依附在 Activity 中執行的類別,透過在 Activity 中載入多個不同的 Fragment,讓我們可以依照我們的需求對程式畫面進行有效的切割,更進階一點,可以利用不同片段的方式,用來適應不同的螢幕尺寸裝置。這個新的類別是從 Android 3.0 之後才被導入,與 Activity 一樣,它具有自己本身的生命週期,但雖然具有自己的生命週期,由於它是被 Activity 載入進來使用,也因此,當 Activity 被消滅的時候,依附在上面的 Fragment 亦會跟著被消滅。
Fragment 的生命週期
使用Fragment的另外一個好處就是,我們不需要宣告太多的 Activity 來進行程式每個階段的頁面切換,而在 Fragment 的切換之間,亦可以加入更具質感的轉場動畫。
《Fragment 的基本用法》
這篇首先來介紹 Fragment 的基本用法,也就是靜態宣告的方式,以下透過程式碼片段的方式,列出靜態宣告 Fragment 的方式。
靜態宣告 Fragment :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package tw.android; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } } |
MainActivity.java
靜態宣告的意思,就是我們在程式開始執行前,就已經在介面佈局檔(.xml)中,宣告並且設定好所要使用的 Fragment 頁面,因此在MainActivity 中,並不需要額外加入程式碼。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <fragment android:id="@+id/mainfragment" android:name="tw.android.MainFragment" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> |
activity_main.xml
在 activity_main.xml 中,我們加入了這個 MainActivity 所會使用到的 Fragment (這邊自訂名稱為 mainfragment),並且於 android:name 中,指向我自己所定義的 tw.android.MainFragment 類別。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
package tw.android; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class MainFragment extends Fragment { private TextView mTxtR; @Override public void onCreate(Bundle savedInstanceState) { // Fragment剛被建立時執行此方法 super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Fragment即將在螢幕上顯示時執行此方法 return inflater.inflate(R.layout.fragment_main, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { // 在這個方法中取得並定義Fragment的介面元件 super.onActivityCreated(savedInstanceState); mTxtR = (TextView) getView().findViewById(R.id.txtR); //... } @Override public void onPause() { // 當Fragment要從螢幕消失時執行此方法 super.onPause(); } } |
MainFragment.java
在自行定義的 MainFragment.java 中,包含了四種複寫方法,分別是 onCreate()、onCreateView()、onActivityCreated() 以及 onPause(),代表著在不同的程式階段,Fragment 所會觸發並執行的事件,通常我們會於 onCreateView() 中指定所要使用的 Fragment 介面佈局,並在 onActivityCreated() 中取得並定義 Fragment 的介面元件。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:id="@+id/txtR" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> |
fragment_main.xml
以上便是最基本的 Fragment 靜態宣告方法,在下一篇我會來說明如何於程式碼中動態操作 Fragment (動態載入)。
臉書留言
一般留言