Fragment的简述

1.Fragment

Fragment为什么会出现,它其实是android3.0的时候引入的,可以翻译为“碎片” “片段”起初它主要是给大屏幕上设备上更灵活的展现UI所设计的。

2.Fragment加载到Activity的两种方式

1.静态添加:添加Fragment到Activity的布局文件当中

2.动态添加:动态在Activity中添加Fragment

静态加载就是把Fragment作为一个xml的标签加到Activity布局当中。

常用的方法就是动态添加

首先在布局文件中放一个FrameLayout,方便在Activity中可以动态添加不同的Fragment

然后在Activity中动态添加Fragment

3.FragmentPagerAdapter与FragmentStatePagerAdapter区别

FragmentPagerAdapter适用于页面较少的情况。

FragmentStatePagerAdapter适用于页面较多的情况。

FragmentPagerAdapter源码中的destroyItem方法:

它最后一行调用的是 FragmentTransaction的detach方法。detach并不是真正的内存回收,它只是把Fragment的UI和Activity的UI脱离开来,并不回收内存。

FragmentStatePagerAdapter源码中的destroyItem方法:

mCurTransaction.remove(fragment),在FragmentStatePagerAdapter里面是真正释放了fragment内存。所以说明了FragmentStatePagerAdapter比FragmentPagerAdapter更节省内存的。

Fragment 创建时会调用:

onAttach() -> onCreate() -> onCreateView() -> onActivityCreated()

onAttach():在Fragment 与 Activity关联之后所回调的

onCreate() : 是在初次创建Fragment时候调用

注:这里的onCreate方法看起来和Activity中的onCreate方法一样。但是这个方法只是用来创建Fragment,此时的Activity还并没有被创建完成。

onCreateView():是系统在Fragment首次绘制用户界面时候调用的这个方法

注:如果想要为这个Fragment绘制UI界面,从该方法返回的View必须是Fragment布局的根视图。

在onCreateView()方法调用之后会调用onViewCreated()方法

onViewCreated():表明Fragment的UI界面已经完全绘制好了,调用这个方法可以初始化控件资源。

onActivityCreated():这个方法是在Activity的onCreat()方法调用之后才可以被调用。也就是在Activity被渲染绘制成功以后的调用方法

Fragment被用户可见后调用

onStart() -> onResume()

onStart():表示Fragment可见了

onResume():表示Fragment可以跟用户进行交互了(点击,滑动等操作)

到这里已经完成了Fragment从启动到展现的操作。

当要Fragment被销毁

onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()

onPause():系统将此方法作为用户离开Fragment的第一个信号(但并不总是意味着此Fragment会被销毁)进行调用。 通常可以在此方法内确认在当前用户会话结束后仍然有效的任何更改(因为用户可能不会返回)。

onDestroyView():表示这个Fragment即将结束,会被保存。

onDetach():Fragment和Activity解除关联的时候调用

到此,我们完整的走完一Fragment的生命周期。

还有一些其他场景时Fragment调用的生命周期

屏幕灭掉

onPause() -> onSaveInstanceState()  -> onStop()

屏幕解锁

onStart()  -> onResume()

切换到其他Fragment

onPause() ->  onStop()  -> onDestroyView()

切换回本身的Fragment

onCreateView()  -> onActivityCreated() ->  onStart()  -> onResume()

回到桌面

onPause() ->  onSaveInstanceState() ->  onStop()

回到应用

onStart()  -> onResume()

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

推荐阅读更多精彩内容