文章仅做个人笔记使用:
Fragment可以视为Activity的一个具有生命周期的模块化组件,必须依赖与Activity,并且生命周期受宿主Activity的影响。
生命周期:
-
onAttach( )
当fragment与Activity关联后调用此方法,Activity在此传递。 -
onCreate( )
fragment首次创建会调用此方法,恢复基本组件数据。 -
onCreateView( )
fragment界面首次绘制时调用,设置fragment的根布局。 -
onActivityCreated( )
关联的Activity已经初始化完成后调用。 -
onStart( )
fragment已经准备完毕,但是还没有展示在前台。 -
onResume( )
fragment已经显示在前台可以和用户进行交互。 -
onPause( )
fragment即将离开,应该在此处保留一些基本信息。 -
onStop( )
fragment已经停止运行,继续做一些后续回收的轻量操作。 -
onDestroyView( )
删除与fragment的关联布局时调用。
依赖的Activity退出时候调用。 -
onDestroy( )
fragment即将被销毁,做最后的资源回收。 -
onDetach( )
当fragment和依赖的Activity失去关联时调用。 -
onHiddenChanged( )
当fragment被隐藏或者显示的时候会调用,类似于onResume( )和onPause( ) -
setUserVisibleHint
和ViewPager嵌套使用时判断是否隐藏显示。
与Activity生命周期的关系:
场景:一个Activity(A)中,有两个Fragment(F和F2)可以来回切换。
-
进入Activity
A:onCreate( )
F:onAttach( )
A:onAttachFragment( )
F:onCreate( )
F:onCreateView( )
F:onActivityCreated( )
F:onStart( )
A:onStart( )
A:onResume( )
F:onResume( ) -
切换至第二个Fragment
F2:onAttach( )
A:onAttachFragment( )
F2:onCreate( )
F:onHiddenChanged( )
F:onPause( )
F:onStop( )
F:onDestroyView( )
F:onDestroy( )
F:onDetach( )
F2:onCreateView( )
F2:onActivityCreated( )
F2:onStart( )
F2:onResume( ) -
切回到第一个Fragment
F2:onHiddenChanged( )
F:onHiddenChanged( ) -
正常退出Activity
F:onPause( )
F2:onPause( )
A:onPause( )
F:onStop( )
F2:onStop( )
A:onStop( )
F:onDestroyView( )
F:onDestroy( )
F:onDetach( )
F2:onDestroyView( )
F2:onDestroy( )
F2:onDetach( )
A:onDestroy( ) -
按Home键进入后台后再回到前前台(没有切换到第二个Fragment)
F:onPause( )
A:onPause( )
F:onStop( )
A:onStop( )
F:onSaveInstanceState( )
A:onSaveInstanceState( ) -
回到前台
A:onRestart( )
F:onStart( )
A:onStart( )
A:onResume( )
F:onResume( ) -
按Home键进入后台后再回到前前台(切换到第二个Fragment)
F:onPause( )
F2:onPause( )
A:onPause( )
F:onStop( )
F2:onStop( )
A:onStop( )
F:onSaveInstanceState( )
F2:onSaveInstanceState( )
A:onSaveInstanceState( ) -
回到前台
A:onRestart( )
F:onStart( )
F2:onStart( )
A:onStart( )
A:onResume( )
F:onResume( )
F2:onResume( )
Activity和Fragment的通信方式
- 通过setArguments()传递Bundle对象,需要在Fragment被Add之前加入。
- 通过接口回调
- 通过getActivity()获取依赖Activity的实例,必须在Fragment和Activity相互关联之后才可以,否则获取为Null。
FragmentActivity
FragmentActivity 继承自Activity,用来解决android3.0 之前没有fragment的api,所以在使用的时候需要导入support包,同时继承fragmentActivity,这样在activity中就能嵌入fragment来实现你想要的布局效果。
网友评论