美文网首页
Fragment切换replace和(add-hide-show

Fragment切换replace和(add-hide-show

作者: yk2fxy | 来源:发表于2017-09-21 10:35 被阅读0次

            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切换时生命周期

    方式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

          本文链接:https://www.haomeiwen.com/subject/fqqzsxtx.html