Fragment 是在Android3.0被引入的。主要是為了給大螢幕手機提供支援。
Fragment的簡單定義:
Fragment可以了解為一個自己具有生命周期的控件,它既有自己的處理能力,又有自己的生命周期,但是又必須依賴于Activity,能互相通信和托管
Fragment的幾個優點:
- 代碼複用。适合子產品化開發。一個Fragment可以被多個Activity嵌套,有共同的業務子產品就可以進行套用
- Activity管理Fragment。Fragment的生命周期是寄托于Activity上面的,Fragment可以被Attach添加和Deatch釋放掉
- 可控性。Fragment可以像普通對象那樣自由的建立和控制,傳遞參數更加容易和友善,也不用處理系統相關的事情,顯示方式,替換,不管是整體還是部分,都可以做到相應的更改。
- 解耦性。
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替換
更多參考:
部落格園