Fragment基础复习

什么是Fragment

Fragment是一种具有生命周期的控件,可以理解为轻量级的Activity,它必须依附于Activity才可以使用。

生命周期

如下图,可以看到Fragment的生命周期是和Activity的生命周期有关联的,
当正常启动一个包含Fragment的Activity,首先是Activity的onCreate,之后才会开始add我们的Fragment:先是Fragment的onAttach->onCreate->onCreateView->onActivityCreated,然后是Activity的onStart–>Fragment的onStart–>Activity的onResume–>Frament的onResume这样下来Fragment就可以使用了。

当正常关闭一个包含Fragment的Activity,则是:Activity的onPause–>Fragment的onPause,Activity的onStop–>FragmentonStop,以及最后Activity 的onDestroy之后,Fragment的onDestroyView->onDestroy->onDetach解除关联。
在这里插入图片描述

Fragment的添加使用

Fragment需要在Activity中调用FragmentManager来管理Fragment,引用一段话

使用3.0以上系统获取FragmentManager使用getFragmentManager();使用3.0以下系统获取FragmentManager使用getSupportFragmentManager()。
Fragmet在使用时是有两个包的,分别是app包和v4包。v4包主要用来兼容低版本系统也能正常显示Fragment,而app包在安卓4.2系统之前的设备运行Fragment时,程序会崩溃。因此我们一般使用Fragment都选择使用v4包中的Fragment以确保低版本的系统运行正常。
原文链接:https://blog.csdn.net/tahlia_/article/details/77970377

所以说在使用V4包下的Fragment就需要在Activity调用getSupportFragmentManager来管理Fragment:

1.add添加Fragment

public void addFrgt(Fragment frgt,int resId)
	FragmentManager frgtManager = getFragmentManager() // v4包则用getSupportFragmentManager
	FragmentTransaction transaction = frgtManager.beginTransatcion();//开启事务
	if(frgt==null){
		frgt=new Fragment();
		transaction.add(resId,frgt);
	}
	/*if(otherFrgt!=null){
		transaction.hide(otherFrgt);
		//如果有多个Fragment切换,那则需要隐藏其他的Fragment而显示当前Fragment
	}*/
	transaction.show(frgt);
	transaction.commit();//提交事务

2.replace添加Fragment

    public void replaceFrgt(Fragment fragment, int id){
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction frgtTransaction = fragmentManager.beginTransaction();
        frgtTransaction.replace(id, fragment);
        frgtTransaction.commit();
    }

这两种方法(add和replace)的区别:
add方法是添加Fragment至布局容器,add()第一次添加Fragment 的生命周期:onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume,重复添加可利用FragmentTransaction的hide/show来隐藏/显示该Fragment,不会重新执行生命周期。

而replace方法每次创建都会重新创建,它会remove掉旧Fragment再 add新Fragment,所以每次调用replace()时Fragment的生命周期为:onPause->onStop->onDestroyView->onDestroy->onDetach(旧的Fragment.remove())–>(新的Fragment.add())onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume。

所以replace的资源消耗是比较大的,如果又经常需要用到的Fragment应该使用add方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值