Fragment碎片:作為Activity的一部分,不能單獨使用; 1. Fragment特點: (1)一個Fragment可以在多個Activity中重用; (2)一個Activity內部可以嵌入多個Fragment; 2. Fragment生命周期: 1)啟動app: Activity:onCr ...
Fragment碎片:作為Activity的一部分,不能單獨使用;
1. Fragment特點:
(1)一個Fragment可以在多個Activity中重用;
(2)一個Activity內部可以嵌入多個Fragment;
2. Fragment生命周期:
1)啟動app:
Activity:onCreate()àonStart()àonResume();
Fragment:
onAttach()àonCreate()àonCreateView()àonActivityCreated()àonStart()àonResume();
2)運行狀態到暫停狀態:
Activity:onPause()àonStop();
Fragment:onPause()àonStop();
3)暫停狀態到運行狀態:
Activity:onRestart()àonStart()àonResume();
Fragment:onStart() àonResume();
4)運行狀態到銷毀狀態:
Activity: onPause()àonStop()àonDestroy();
Fragment:onPause()àonStop()àonDestroyView()àonDestroy()àonDetach();
(1)onAttach():關聯Fragment和Activity;可以在此方法中獲取當前Fragment所在的Activity;
(2)onCreate():Fragment創建時調用此方法;可以初始化View的控制項;
(3)onCreateView():繪製Fragment的UI界面時調用此方法;必須返回一個View對象,如果返回為null,則該Fragment不會顯示內容;
(4)onActivityCreated():當前Fragment所在Activity的onCreate()執行完成後回調此方法;
(5)onStart():能看到部分界面但是不能交互;
(6)onResume():運行狀態,可以交互;
(7)onPause():暫停狀態,不能交互;
(8)onStop():停止狀態:看不到UI界面;
(9)onDestroyView():Fragment從Activity中移除View時回調此方法;
(10)onDestroy():Fragment被銷毀時回調的方法;
(11)onDetach():Fragment和所在的Activity失去關聯回調此方法;
3. 創建Fragment:
(1)創建Fragment的xml佈局文件;
(2)創建Fragment子類,繼承Fragment類或者Fragment子類;
(3)重寫回調方法onCreate(), onCreateView(), onPause()等方法;
1)onCreate():創建Fragment時回調此方法,可以初始化View以外的控制項;
2)onCreateView():繪製Fragment的UI界面時回調此方法,必須返回一個View視圖對象,作為當前Fragment的顯示視圖;
該方法傳入佈局載入器,用該佈局載入器調用inflate()載入fragment的佈局文件,傳入三個參數:參數1:要載入的Fragment佈局文件;參數2:該Fragment所在的容器;參數3:布爾值;之後返回佈局載入器載入的視圖;
註意:(1)如果參數2設置為null,則會直接返回創建的視圖;
(2)(推薦)如果參數2設置為傳入的container容器,參數3為false,則會從容器中得到LayoutParams,對要載入的視圖設置LayoutParams;
(3)如果參數2設置為傳入的container容器,參數3為true,則將要載入的子視圖放在container容器中;
4. 將Fragment嵌入到Activity中:
(1)第一種方式:靜態標簽添加:
使用fragment標簽,必須添加屬性id指定當前fragment的id和屬性name指定包名;
(2)第二種方式(常用):代碼動態嵌入:
1)獲取碎片管理器,上下文調用getFragmentManager()獲得FragmentManager對象;
2)開啟事務,FragmentManager對象調用beginTransaction()獲得FragmentTransaction對象;
3)動態將Fragment嵌入到Activity中,包括add()添加,replace()替換,remove()移除等;
添加和替換時需要傳入兩個參數:參數1:將Fragment放入的容器中;
參數2:要放進容器中的Fragment對象;
4)提交事務,FragmentTransaction對象調用commit()提交;
註意:事務一定進行提交之後,才會運行;