1. 程式人生 > >Android Studio 單刷《第一行程式碼》系列 06 —— Fragment 生命週期

Android Studio 單刷《第一行程式碼》系列 06 —— Fragment 生命週期

前情提要(Previously)

本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。
PS:其實我就是現學現賣,希望我能堅持刷完。

在前面剛學習了Fragment,這次來了解一下她的生命週期。

系列目錄在此:

Fragment 的生命週期

先來看一下 Fragment 的生命週期圖解吧。

fragment_lifecycle

與 Activity 的 關係

Fragment 必須是依存於 Activity 而存在的,因此 Activity 的生命週期會直接影響到 Fragment 的生命週期。Android 官網這張圖很好的說明了兩者生命週期的關係,如下

activity_fragment_lifecycle

跟 Activity 比較,多了下面幾個回撥函式:

  1. onAttach(),當 Fragment 和 Activity 建立關聯時呼叫。
  2. onCreateView(),當為 Fragment 建立檢視時呼叫。
  3. onActivityCreated(),與 Fragment 關聯的 Activity 已經建立完畢時呼叫。
  4. onDEstroyView(),當與 Fragment 關聯的檢視被移除時呼叫。
  5. onDetach(),當 Fragment 和 Activity 接觸關聯是呼叫。

體驗 Fragment 的生命週期

開啟上一篇 Android Studio 單刷《第一行程式碼》系列 05 —— Fragment 基礎

 中的 FragmentTest 專案,修改 RightFragment 中的程式碼,重寫每一個回撥方法在裡面加上輸出日誌,程式碼如下:

public class RightFragment extends Fragment {

  public static final String TAG = "RightFragment";

  @Override
  public void onAttach(Activity activity) {
      super.onAttach(activity);
      Log.d(TAG, "onAttach");
  }

  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      Log.d(TAG, "onCreate");
  }

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      Log.d(TAG, "onCreateView");
      View view = inflater.inflate(R.layout.right_fragment, container, false);
      return view;
  }

  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
      super.onActivityCreated(savedInstanceState);
      Log.d(TAG, "onActivityCreated");
  }

  @Override
  public void onStart() {
      super.onStart();
      Log.d(TAG, "onStart");
  }

  @Override
  public void onResume() {
      super.onResume();
      Log.d(TAG, "onResume");
  }

  @Override
  public void onPause() {
      super.onPause();
      Log.d(TAG, "onPause");
  }

  @Override
  public void onStop() {
      super.onStop();
      Log.d(TAG, "onStop");
  }

  @Override
  public void onDestroyView() {
      super.onDestroyView();
      Log.d(TAG, "onDestroyView");
  }

  @Override
  public void onDestroy() {
      super.onDestroy();
      Log.d(TAG, "onDestroy");
  }

  @Override
  public void onDetach() {
      super.onDetach();
      Log.d(TAG, "onDetach");
  }

}

  • 執行,RightFragment 第一次載入,檢視 Logcat 中的日誌,如下圖

log1

  • 點選 LeftFragment 中的 Button,AnotherRightFragment 替換 RightFragment 出現,檢視日誌,如下圖

log2

  • 按 Back 鍵,RightFragment 出現,檢視日誌,如下圖

log3

  • 再按 Back 鍵,程式退出,檢視日誌,如下圖

log4

OK 了,我們對 Fragment 的生命週期已經瞭解的差不多,更深刻的理解以後用到的時候再說了。

其它(Miscellaneous)

儘管我試圖在本文中儘量完整的進行描述,但受限於篇幅和我的個人水平,本文難免有所遺漏,歡迎在評論中指出。
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!

關於作者(About Me)

相關推薦

Android Studio 第一程式碼系列 06 —— Fragment 生命週期

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望

Android Studio 第一程式碼系列 05 —— Fragment 基礎

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 在

Android Studio 第一程式碼系列 04 —— Activity 相關

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 系

Android Studio 第一程式碼系列 02 —— 日誌工具 LogCat

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 在

Android Studio 第一程式碼系列 01 —— 第一戰 HelloWorld

前言(Prologue) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持

Android Studio 第一程式碼系列目錄

前言(Prologue) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 關鍵詞 《第一行程式碼》:C

Android Studio 第一程式碼系列 07 —— Broadcast 廣播

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 系列目錄在此: 系

Android Studio 第一程式碼系列 03 —— Activity 基礎

前情提要(Previously) 本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。 PS:其實我就是現學現賣,希望我能堅持刷完。 在 Day 1、Da

Android 學習之《第一程式碼》第二版 筆記(十)探究碎片(二)

一個簡易版的新聞應用 同時相容手機和平板的應用程式 一、佈局 news_content_frag.xml額我的程式碼裡面是news_content_fragment.xml,圖片打錯了 二、程式碼編寫 1. 實體類(News.java) //新聞實體類 pub

Android 學習之《第一程式碼》第二版 筆記(九)探究碎片(一)

一、碎片 1. 碎片是什麼: 碎片(Fragment)是一種可以嵌入在活動當中的UI片段,能讓程式更加合理和充分地利用大螢幕的空間。(可以理解成迷你型活動) 2. 簡單用法: 在一個活動當中新增兩個碎片,並讓這兩個碎片平分活動空間。 1.)效果圖(沒錢買平板,CPU不支援

Android 學習之《第一程式碼》第二版 筆記(十一)詳解廣播機制(一)

一、廣播機制簡介 1. 四大元件之一 2. Android 提供了一套完整的API,允許應用程式自由地傳送和接收廣播。 A. 傳送廣播藉助Intent B. 接收廣播藉助廣播接收器(Broadcast Receiver) 3. 廣播型別: A. 標準廣播: 完全非同步執行

Android 學習之《第一程式碼》第二版 筆記(十二)詳解廣播機制(二)

廣播的最佳實踐——實現強制下線功能 思路:在介面上彈出一個對話方塊,讓使用者無法進行任何操作,必須點選對話方塊中的確定按鈕,然後回到登入介面即可。 一、效果圖 1. 登入介面並輸入賬號密碼 2. 登陸後的介面 3. 強制下線 4. 退回登陸的介面

Android 學習之《第一程式碼》第二版 筆記(十五)執行時許可權

一、執行時許可權功能 使用者不需要在安裝軟體的時候一次性授權所有申請的許可權,而是可以在軟體的使用過程中再對某一項許可權申請進行授權。 分類:普通許可權和危險許可權 我們在進行執行時許可權處理時使用的是許可權名,但是使用者一旦同意授權了,那麼該許可權所對應的

Android學習筆記(第一程式碼) 做一個簡單的登入介面

一.建立xml檔案 1.賬戶輸入框和密碼輸入框的編寫 <TextView android:layout_height="wrap_content" android:text="@string/LG_name" />

第一程式碼系列第二章——更多隱式Intent用法(開啟網頁)

效果圖 修改FirstActivity中按鈕事件 Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new OnClickListener() {

Android Studio 手動建立活動(Activity) 第一程式碼 第二章

活動概念:是一種可以包含使用者介面的元件,主要用於和使用者進行互動 手動建立活動:新建一個Android專案,專案名為ActivityTest,包名使用預設值com.example.activitytest 1.新建Android Studio專案 點選Start a

第一程式碼筆記系列-廣播1)android 廣播動態註冊和靜態註冊有什麼區別及基本用法

新建一個BroadcastTest專案,然後修改MainActivity中的程式碼,如下所示: public class MainActivity extends Activity { private IntentFilter intentFilter; private NetworkChange

Android studio 入門第二天《第一程式碼

一,建立和載入佈局 app/src/main/res/new/directory,建立一個名為layout的目錄,然後右擊/layout resource file/ 新增按鈕程式碼 <LinearLayout xmlns:android="http://sche

第一程式碼Android》學習總結第三章 自定義佈局與控制元件

1、View是Android中最基本的元件,它可以在螢幕上繪製一塊矩形區域,並在這塊區域內響應各種事件。所有控制元件都直接或間接繼承自View。 2、ViewGroup是一種特殊的View,可以包含很多子View和子ViewGroup,是一個用於放置控制元件和佈局的容器。所有佈局都直接或間

第一程式碼Android》學習總結第三章 常用控制元件使用方法

1、TextView match_parent:表示讓父佈局決定當前控制元件大小,當前控制元件大小與父佈局大小一樣。 wrap_content:表示讓空間內容決定當前控制元件大小讓當前控制元件大小能夠剛好包含住控制元件內的內容。         對控