??????? Fragment在現(xiàn)在的android開發(fā)中已經(jīng)很常見了,基本所有的app都會(huì)涉及到。在Fragment的切換中有兩種方式----方式1使用replace直接切換;方式2使用add先添加Fragment,然后再使用hide隱藏不顯示的Fragment亚皂,最后再用show將需要顯示的Fragment顯示出來(lái)丢烘。
????? 下面將介紹下這兩種方式:
方式1:使用replace
?使用replace切換Fragment的代碼如下:
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_container,baseFragment);
ft.commit();
使用此方式的生命周期如下:
方式2:使用add-hide-show
使用add-hide-show代碼如下
FragmentManagerfm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
BaseFragment bf = (BaseFragment) fm.findFragmentById(R.id.fragment_container);
if(bf==null||bf!=baseFragment){
????? ft.add(R.id.fragment_container,baseFragment);
}
List ls = fm.getFragments();
if(ls!=null){
???? for(Fragment f:ls){
?????????????? ft.hide(f);
??? }
}
ft.show(baseFragment);
ft.commit();
使用此方式的生命周期如下圖
兩種方式對(duì)比
1.從代碼量對(duì)比看:replace切換Fragment比add-hide-show代碼量要少柱宦;
2.從生命周期看:replace方式比add-hide-show方式走的生命周期要多;
兩種方式的選擇
綜上播瞳,可以看出--使用方式1時(shí)掸刊,代碼簡(jiǎn)單,但是每次切換的時(shí)候都需要把前一個(gè)Fragment銷毀赢乓,這樣兩個(gè)Fragment切換耗時(shí)就會(huì)相對(duì)較長(zhǎng)忧侧;使用方式2,代碼復(fù)雜骏全,但是每次切換不用去銷毀前一個(gè)Fragment苍柏,這樣兩個(gè)Fragment切換耗時(shí)就相對(duì)較短,但是因?yàn)闆]有銷毀Fragment姜贡,會(huì)占用內(nèi)存试吁。
所以,一般情況下如果Fragment不是很多就可以使用方式2來(lái)進(jìn)行切換楼咳,這樣能提高切換時(shí)的效率熄捍,保證app的流暢性(空間換時(shí)間);如果Fragment比較多母怜,并且對(duì)內(nèi)存要求較高時(shí)余耽,就用方式1來(lái)進(jìn)行切換,保證app不會(huì)內(nèi)存溢出(時(shí)間換空間)苹熏。