Fragment在现在的android开发中已经很常见了,基本所有的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,代码复杂,但是每次切换不用去销毁前一个Fragment,这样两个Fragment切换耗时就相对较短,但是因为没有销毁Fragment,会占用内存。
所以,一般情况下如果Fragment不是很多就可以使用方式2来进行切换,这样能提高切换时的效率,保证app的流畅性(空间换时间);如果Fragment比较多,并且对内存要求较高时,就用方式1来进行切换,保证app不会内存溢出(时间换空间)。