天天看點

【Android面試】Fragment相關

Fragment 是在Android3.0被引入的。主要是為了給大螢幕手機提供支援。

Fragment的簡單定義:

Fragment可以了解為一個自己具有生命周期的控件,它既有自己的處理能力,又有自己的生命周期,但是又必須依賴于Activity,能互相通信和托管

Fragment的幾個優點:

  • 代碼複用。适合子產品化開發。一個Fragment可以被多個Activity嵌套,有共同的業務子產品就可以進行套用
  • Activity管理Fragment。Fragment的生命周期是寄托于Activity上面的,Fragment可以被Attach添加和Deatch釋放掉
  • 可控性。Fragment可以像普通對象那樣自由的建立和控制,傳遞參數更加容易和友善,也不用處理系統相關的事情,顯示方式,替換,不管是整體還是部分,都可以做到相應的更改。
  • 解耦性。

Fragment的生命周期

【Android面試】Fragment相關

相比于Activity的生命周期,Fragment的生命周期會多一些,主要是Fragment依附在Activity上。

onAttach:

Fragment和Activity建立關聯的時候進行調用,被附加到Activity上

onCreate:

建立Fragment的時候調用,初始化一些資源檔案

onCreateView:

Fragment首次繪制使用者界面調用

onViewCreated:

Fragment被繪制後,調用此方法,可以初始化控件資源

onActivityCreated:

當onCreate,onCreateView,onViewCreated方法執行後進行調用

Fragment的使用方式

  • 靜态用法

    1 繼承Fragment,重寫onCreateView來決定布局

    2 在Activity聲明此Fragment,和普通的View一樣

  • 動态用法

    1 繼承Fragment,重寫onCreateView來決定布局

    2 Activity布局使用id,動态添加Fragment

動态添加Fragment步驟

1 擷取到FragmentManager,在Activity中通過getFragmentManager來獲得

2 開啟事務,使用beginTransaction

3 向容器中加入Fragment,一般用replace方法,傳入容器id和Fragment的執行個體

4 送出事務,使用commit送出

一般代碼:

Fragment1 fragment1 = new Fragment1();     

getFragmentManager().beginTransaction().replace(R.id.main_layout, fragment1).commit(); 
           

Fragment通信

  • Activity與Fragment的通信
    findFragmentById 或者 findFragmentByTag
  • Fragment與Fragment的通信

    先通過擷取到Activity,再使用接口的方式進行通信

Fragment 的注意事項

  • Fragment在Activity中隻有一個ID或Tag辨別的執行個體
  • 一個Activity中有一個Fragment池,執行個體不一定被銷毀,可能會存在池子中
  • FragmentManager的作用範圍是整個Activity,是以,某一個布局ID,不能重複被Fragment替換

更多參考:

部落格園

繼續閱讀