生命周期
-
onAttach:
onAttach()在fragment與Activity關(guān)聯(lián)之后調(diào)用孵延。初始化fragment參數(shù)可以從getArguments()獲得壳快,但當(dāng)Fragment附加到Activity之后,就無(wú)法再調(diào)用setArguments()食铐,這點(diǎn)和構(gòu)造方法很類似
-
onCreate:
fragment初次創(chuàng)建時(shí)調(diào)用。類似Activity的OnCreate()函數(shù),此時(shí)Activity還沒有創(chuàng)建完成击纬。如果想要獲得Activity的資源,必須在onActivityCreated中獲取钾麸。
-
onCreateView:
在這個(gè)fragment構(gòu)造布局時(shí)調(diào)用更振,一般這時(shí)候綁定xml文件渲染view。
-
onActivityCreated:
在Activity的OnCreate()結(jié)束后調(diào)用此方法饭尝。在這個(gè)函數(shù)中才可以調(diào)用Activity的資源肯腕。
-
onStart:
此時(shí)Fragment對(duì)用戶就是可見的了。但用戶還未開始與Fragment交互钥平。Fragment的OnStart()過(guò)與Activity的OnStart()是綁定的实撒。
-
onResume:
當(dāng)這個(gè)fragment對(duì)用戶可見并且正在運(yùn)行時(shí)調(diào)用。這是Fragment創(chuàng)建過(guò)程最后一個(gè)生命周期涉瘾。Fragment的OnResume與Activity的OnResume是相互綁定的奈惑,意義是一樣的。它依賴于包含它的activity的Activity.onResume睡汹。
-
onPause:
此回調(diào)與Activity的OnPause()相綁定肴甸,fragment對(duì)用戶不可見的時(shí)候調(diào)用。
-
onStop:
與Activity的OnStop()相綁定囚巴,意義一樣原在。已停止的Fragment可以直接返回到OnStart()回調(diào),然后調(diào)用OnResume()彤叉。
-
onDestroyView:
如果Fragment即將被結(jié)束或保存庶柿,下一個(gè)回調(diào)將是onDestoryView()。會(huì)將onCreateView創(chuàng)建的視圖與這個(gè)fragment分離秽浇。該fragment若要重新顯示浮庐,將會(huì)創(chuàng)建新視圖。該方法調(diào)用與onCreateView是否返回非null視圖無(wú)關(guān)。它會(huì)潛在的在這個(gè)視圖狀態(tài)被保存之后以及它被它的父視圖回收之前調(diào)用审残。
-
onDestroy:
當(dāng)這個(gè)fragment不再使用時(shí)調(diào)用梭域。需要注意的是,它即使經(jīng)過(guò)了onDestroy()階段搅轿,但仍然能從Activity中找到病涨,因?yàn)樗€沒有Detach。
-
onDetach:
最后一個(gè)回調(diào)是onDetach()璧坟。調(diào)用它以后既穆,F(xiàn)ragment就不再與Activity相綁定,它也不再擁有視圖層次結(jié)構(gòu)雀鹃,它的所有資源都將被釋放幻工。
靜態(tài)加載和動(dòng)態(tài)加載:
靜態(tài)加載:適用于單頁(yè)面無(wú)需管理切換等f(wàn)ragment狀態(tài),例如某個(gè)頁(yè)面切割成不同模塊分別處理業(yè)務(wù)黎茎。
動(dòng)態(tài)加載:常用于改變需要改變狀態(tài)的頁(yè)面会钝,例如帶有bottomNavgation的頁(yè)面等。
-
靜態(tài)加載
-
動(dòng)態(tài)加載
image.png
Activity和Fragment數(shù)據(jù)交互
-
組件獲取
Activity獲取Fragment的控件:getFragmentManager.findFragmentById(R.id.xxx)
Fragment獲取Activity的控件:getActivity().findViewById(R.id.xxx)
-
數(shù)據(jù)交互
Activity傳遞給Fragment:
1工三、eventbus(不建議)
2迁酸、接口回調(diào)
3、fragment里面寫方法俭正,activity調(diào)用
4奸鬓、fragment的構(gòu)造方法傳參(只能初始化用一次)
5、activity跳轉(zhuǎn)時(shí)setArgument(Bundle)傳遞
Fragment傳遞參數(shù)給Activity:
1掸读、eventbus(不建議)
2串远、接口回調(diào)
3、activity里面寫方法儿惫,fragment調(diào)用
Fragment與Fragment之間的數(shù)據(jù)互傳
1澡罚、eventbus(不建議)
2、接口回調(diào)
3肾请、fragment里面寫方法留搔,另一個(gè)fragment調(diào)用
4、創(chuàng)建時(shí):找到接受數(shù)據(jù)的fragment對(duì)象,直接調(diào)用setArguments傳數(shù)據(jù)
6铛铁、實(shí)時(shí)傳遞:就是以Activity為媒介隔显,需要先在Activity獲得f1傳過(guò)來(lái)的數(shù)據(jù), 再傳到f2了
Fragment管理和事務(wù)
Fragment加載 詳細(xì)見
-
FragmentManager管理Fragment的加載(add)、替換(replace)饵逐、刪除(remove)等操作括眠,此時(shí)的Fragment所在的容器一般選擇用FrameLayout。
-
使用ViewPager等容器去裝載Fragment列表并通過(guò)他們自己的頁(yè)面切換能力去切換Fragment倍权。