1.Fragment
fragment译为“碎片”,是Android 3.0(API 11)提出的,最开始是为了适配大屏的平板。
Fragment看起来和Activity一样,是一个用户界面。可以结合多个Fragment到一个activity中来构建一个有多方面功能的UI,还可以重用同一个Fragment在多个activity中。Fragment可以当成是activity的一个组件,每个Fragment有单独的生命周期,可以在activity运行时进行添加和移除。因此,相比较于activity,Fragment更加轻量级,更加灵活。
一个Fragment总是被植入到一个activity中 ,并且它的生命周期受该activity直接影响,比如activity处于暂停,则其中的Fragment都暂停;activity销毁,则所有Fragment都销毁。但是,当一个activity运行时,你可以独立的操作每一个Fragment,比如添加和删除它们。进行类似的操作时,可以将Fragment添加到被activity管理的后退栈中,这样用户可以通过点击返回按钮来返回之前打开的Fragment。
Fragment可以作为activity的一部分添加到布局文件中,通过声明元素作为ViewGroup的一部分。也可以将Fragment作为一个没有自己UI的不可见的activity的工人。
总结一下:
①Fragment依赖于Activity,不能独立存在。
②一个Activity里可以有多个Fragment。
③一个Fragment可以被多个Activity重用。
③Fragment有自己的生命周期,并能接收输入事件。
④可以在Activity运行时动态地添加或删除Fragment。
2.Fragment生命周期
常见的周期流程:
①Activity加载Fragment的时候,依次调用:onAttach() -> onCreate() -> onCreateView() -> onActivityCreated() -> onStart() ->onResume()
②当做出一个悬浮的对话框风格的Activity或者其他,就是让Fragment所在的Activity可见,但不获得焦点:onPause()
③当对话框关闭,Activity又获得了焦点: onResume()
④当替换Fragment,并调用addToBackStack()将它添加到后退栈中:onPause() -> onStop() -> onDestoryView() 。注意,此时的Fragment还没有被销毁。
⑤当按下键盘的回退键,Fragment会再次显示出来:onCreateView() -> onActivityCreated() -> onStart() -> onResume()
⑥如果替换后,在事务commit之