Fragment的add()和replace区别

使用transaction.add() : 对两个Fragment进行切换
 //显示第一个fragment;
    private void initFragment1(){
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        if(f1 == null){
            f1 = new MyFragment("消息");
            //第一种方式 使用add() 添加到事务中
            transaction.add(R.id.main_frame_layout,f1);
        }
        //隐藏所有Fragment
        hideFragment(transaction);
        //显示fragment1
       transaction.show(f1);
       transaction.commit();
 }
使用add()情况下:两个Fragment的生命周期
5bf7a4fc8485f
使用transaction.replace() : 对两个Fragment进行切换
   //显示第一个fragment;
    private void initFragment1(){
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        if(f1 == null) {
            f1 = new MyFragment("消息");
        }
        //第二种方式 使用replace() 替换到事务中
        transaction.replace(R.id.main_frame_layout, f1);
        //提交事务
        transaction.commit();
  }
使用replace()情况下:两个Fragment的生命周期
5bf7a4684b1ab
总结:

可以看到add()方法添加的Fragment没有发生销毁对象的情况,怎么切换还是原来的Fragment
而replace()方法,会销毁前一个Fragment1,重新创建Fragment2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。