Fragment切换replace和(add-hide-show)

        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();

使用此方式的生命周期如下:


Fragment切换replace和(add-hide-show)_第1张图片
Fragment使用replace切换时生命周期

方式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();

使用此方式的生命周期如下图


使用add-hide-show方式切换Fragment生命周期

两种方式对比

1.从代码量对比看:replace切换Fragment比add-hide-show代码量要少;

2.从生命周期看:replace方式比add-hide-show方式走的生命周期要多;

两种方式的选择

综上,可以看出--使用方式1时,代码简单,但是每次切换的时候都需要把前一个Fragment销毁,这样两个Fragment切换耗时就会相对较长;使用方式2,代码复杂,但是每次切换不用去销毁前一个Fragment,这样两个Fragment切换耗时就相对较短,但是因为没有销毁Fragment,会占用内存。

所以,一般情况下如果Fragment不是很多就可以使用方式2来进行切换,这样能提高切换时的效率,保证app的流畅性(空间换时间);如果Fragment比较多,并且对内存要求较高时,就用方式1来进行切换,保证app不会内存溢出(时间换空间)。

你可能感兴趣的:(Fragment切换replace和(add-hide-show))