Android高效入門-Fragment片段的由來與生命週期

作者 | 2016-06-02

什麼是Fragment

Fragment片段(或稱為區塊)是Android提供的一個畫面區塊,可將Fragment放在一個Activity中,可使用多個Fragment構成一個手機畫面,所以,Fragment是Activity的子畫面,如下圖:

A4449

在Activity中的每個Fragment擁有自己的生命週期,當Activity進入暫停時,Activity內的Fragment也會自動執行相對的生命週期方法,在Fragment中覆寫這些方法,可自訂區塊的功能設計。例如,何時要重新讀取資料、何時暫停處理資料等。

在2009年Android剛嶄露頭角時,手機的畫面不大,解析度也不高,一個畫面放不了太多資訊,因此使用Activity轉換到另一個Activity的方式來設計功能,如下圖:

A4450

像是在Activity1中顯示消費清單,當按下清單中的其中一個項目時,在Activity2顯示該筆消費的詳細資訊。

但從2010年時平板開始流行後,畫面變大、解析度變高,一個畫面可容納更多的元件了,2011年初Android 3.0推出時,即加入了Fragment元件,可在Activity中加入Fragment區塊,使其可在一個畫面下容納多個區塊的顯示,並自訂每個區塊的內容,或者更換其中一個區塊功能。

手機環境如果仍是Android 3.0(API Level 11)之前的版本,如2.2、2.3等並沒有Fragment類別,如果想要讓使用Fragment類別的應用程式能在這類手機中正常執行,必須要在專案包入額外的支援類別庫,並在程式中使用支援類別庫中的Fragment相關類別,後續文章的實作內容中會詳細說明。

Fragment的生命週期

每個Fragment擁有自己的生命週期,也就是說,在特定的狀況會自動呼叫特定的方法,供使用者依功能需求覆寫這些方法,加入必要的程式碼。依照Fragment產生與出現的順序會執行的方法描述如下:

產生階段(未出現在畫面上)

  1. onAttach方法

當Fragment被加到某個Activity畫面中時,會自動呼叫此方法。

  1. onCreate方法

Fragment被建立時會自動呼叫此方法,可加入初始化元件或資料的程式碼。

  1. onCreateView方法

將在畫面中第一次顯示Fragment時會自動呼叫此方法,必須回傳Fragment畫面的View元件,設計時,請使用方法中的LayoutInflater物件,在此方法中產生畫面元件並回傳。

  1. onActivityCreated方法

當加入本Fragment的Activity被建立時,該Activity的onCreate方法執行完成後,會自動執行此方法。執行完此方法後,Fragment才出現在畫面上。

準備階段(出現在畫面上)

  1. onStart方法

當Fragment出現在畫面中時先執行此方法。

  1. onResume方法

執行完onStart方法後,再自動執行本方法。完成後即在畫面中與使用者互動。

暫停階段

當使用者按下返回鍵,或是程式中將Fragment自某個Activity中移除時,會自動執行以下方法:

  1. onPause方法

進入暫停前第一個執行的方法。

  1. onStop方法

執行完onPause方法後,自動執行本方法。

  1. onDestroyView方法

此時Fragment已不在畫面中,呼叫此方法。

  1. onDestroy方法

當Fragment要被清除之前,會執行此方法。

  1. onDetach方法

與當初被加入的Activity卸載時,會自動執行此方法。

使用Fragment的Activity

Android Studio在建立Activity時雖然可勾選「使用Fragment」,但產生出的類別與版面架構資訊過多,筆者將以較簡潔的方式,在本節建立一個新的測試用專案「FragmentLifeCycle」,由空白活動開始,解說專案架構並實作一些方法以驗證上節所說明的生命週期相關方法。待日後基礎功能清楚後,讀者可自行以較快速的方式產生具Fragment的活動。

1. 建立專案與Activity

專案命名與package資訊如下圖:

A4452

再選擇「Empty Activity」建立空白活動,如下圖:

A4965

2. 建立Fragment類別

一個片段類別必須繼承「Fragment」類別,或是「ListFragment」、「DialogFragment」或「PreferenceFragment」這些子類別。

使用功能表的「New/Fragment/Fragment(Blank) 」可以快速產生一個Fragment,新類別使用預設的名稱「BlankFragment」,並自動產生一個專用的版面配置檔「fragment_blank.xml」,請暫不勾選最下方的選項,如下圖:

本文章內容擷取自[Android實作這樣學]電子書

相關文章:

Category: Android Fragment 標籤:, , ,

關於 Hank Tom

專長為程式語言、雲端服務開發,Linux系統管理, 任職:利拓科技 技術長,海林行動科技 技術總監 輔仁大學 兼任助理教授 , 為 Android高效入門>深度學習、CentOS 7建置、管理與伺服器架設實戰、Java網路程式設計、雲端網頁程式設計-Google App Engine應用實作 等書作者

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *