??????? Fragment在現(xiàn)在的android開發(fā)中已經(jīng)很常見了,基本所有的app都會涉及到。在Fragment的切換中有兩種方式----方式1使用replace直接切換;方式2使用add先添加Fragment,然后再使用hide隱藏不顯示的Fragment,最后再用show將需要顯示的Fragment顯示出來。
????? 下面將介紹下這兩種方式:
方式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();
使用此方式的生命周期如下圖
兩種方式對比
1.從代碼量對比看:replace切換Fragment比add-hide-show代碼量要少;
2.從生命周期看:replace方式比add-hide-show方式走的生命周期要多;
兩種方式的選擇
綜上,可以看出--使用方式1時,代碼簡單,但是每次切換的時候都需要把前一個Fragment銷毀,這樣兩個Fragment切換耗時就會相對較長;使用方式2,代碼復(fù)雜,但是每次切換不用去銷毀前一個Fragment,這樣兩個Fragment切換耗時就相對較短,但是因為沒有銷毀Fragment,會占用內(nèi)存。
所以,一般情況下如果Fragment不是很多就可以使用方式2來進行切換,這樣能提高切換時的效率,保證app的流暢性(空間換時間);如果Fragment比較多,并且對內(nèi)存要求較高時,就用方式1來進行切換,保證app不會內(nèi)存溢出(時間換空間)。