1、Fragment是Android在3.0版本后引入的敦捧,初衷是為了適應(yīng)大屏幕的平板電腦须板。
2、使用Fragment可以吧屏幕分為幾塊兢卵,然后進(jìn)行分組习瑰,進(jìn)行模塊化的管理
3、Fragment并不能單獨(dú)使用济蝉,他需要嵌套在Activity中使用杰刽,盡管它有自己的生命周期菠发,但還是會(huì)受到宿主Activity的生命周期的影響,例如:Activity被destory銷(xiāo)毀了贺嫂,它也會(huì)跟著銷(xiāo)毀滓鸠。
4、Fragment需要先導(dǎo)入android-support-v4的jar包才能使用Fragment功能第喳。
5糜俗、加載方式:——靜態(tài)加載 ? ——?jiǎng)討B(tài)加載
6、靜態(tài)加載Fragment實(shí)現(xiàn)流程:
? ? ? ①定義Fragment的xml布局文件曲饱。
? ? ? ②自定義Fragment類(lèi)悠抹,需繼承Fragment類(lèi)或其子類(lèi),同時(shí)實(shí)現(xiàn)onCreateView()方法扩淀,在方法中楔敌,通過(guò)inflater.inflate加載布局文件,接著返回view驻谆。
? ? ? ③在需要加載Fragment的Activity對(duì)應(yīng)的布局文件中fragment的name屬性需要為全限定類(lèi)名:即 包名+ “ . ” +fragment自定義的class文件卵凑。
? ? ? ④Activity調(diào)用布局即可。
7胜臊、動(dòng)態(tài)加載Fragment主要分為四步:
? ? ? ①獲取FragmentManager(fm)勺卢,在Activity中可以直接通過(guò)getSupportFragmentManager(或者getFragmentManager)(通過(guò)這get...來(lái)管理activity中的fragment)得到。
? ? ? ②開(kāi)啟一個(gè)事務(wù)象对,通過(guò)調(diào)用beginTransaction方法開(kāi)啟(fm.beginTransaction();)黑忱。
? ? ? ③向容器中加入Fragment,調(diào)用add()方法或者replace()方法加載Fragment勒魔,(add(要傳入的容器甫煞,fragment對(duì)象))。
? ? ? ④在前面的基礎(chǔ)上還需調(diào)用commit()方法提交事務(wù)沥邻,當(dāng)然還有其他方法危虱,如remove。
8唐全、FragmentTransaction(fragment事務(wù))
一般用來(lái)對(duì)當(dāng)前的Fragment進(jìn)行管理埃跷,常用的針對(duì)Fragment的方法有:
------將一個(gè)fragment實(shí)例添加到Activity的最上層
add(要傳入的容器,fragment對(duì)象)邮利;
------將一個(gè)fragment實(shí)例從Activity的fragment隊(duì)列中刪除
remove(Fragment?fragment)弥雹;
------替換containerViewId中的fragment實(shí)例,注意延届,它首先把containerViewId中所有fragment刪除剪勿,然后再add進(jìn)去當(dāng)前的fragment
replace(要傳入的容器,fragment對(duì)象)方庭;
9厕吉、使用add方法而不常用replace的原因:
——如果我們使用replace來(lái)切換頁(yè)面酱固,那么在每次切換的時(shí)候,F(xiàn)ragment都會(huì)重新實(shí)例化头朱,重新加載一邊數(shù)據(jù)运悲,這樣非常消耗性能和用戶的數(shù)據(jù)流量。
——?這是因?yàn)閞eplace操作项钮,每次都會(huì)把Container中的現(xiàn)有的fragment實(shí)例清空班眯,然后再把指定的fragment添加進(jìn)去,就就造成了在切換到以前的fragment時(shí)烁巫,就會(huì)重新實(shí)例會(huì)fragment署隘。
?——正確的切換方式是add(),切換時(shí)hide()亚隙,add()另一個(gè)Fragment磁餐;再次切換時(shí),只需hide()當(dāng)前恃鞋,show()另一個(gè)崖媚。?這樣就能做到多個(gè)Fragment切換不重新實(shí)例化
10、Fragment管理與Fragment事務(wù)