使用fragment的优势:
- 可以在手机和平板设备上设计不同的布局,然后用fragment填充布局,展示内容;
- 可以配合ViewPager完成滑动切换fragment的操作,带来更好的操作体验;
- 可以在不销毁Activity的同时,通过fragment组装或重新组装显示的控件,更具有灵活性。
- 可以复用
fragment的生命周期:
启动:onAttach(Context)、onCreate(Bundle)、onCreateView() (全在setContentView()方法中调用)
创建:onActivityCreated(Bundle)
停止:onStart()、onDestroyView()
暂停:onResume()、onStop()
运行:onPause()
销毁:onDestroy()、onDetach()
activity托管fragment的两种方式
- 静态托管:在activity布局文件中定义fragment,等同于将fragment视图绑定在activity视图中,无法替换fragment视图;
- 动态托管:通过Java代码的方式,用资源id作为fragment视图的代表,替换activity布局中需要替换的部分。
FragmentManager
FragmentManager类负责管理fragment并将它们的视图添加到activity的视图层级结构中。
FragmentManager类具体管理:
- fragment队列;
- fragment事务回退栈。
activity的FragmentManager负责调用队列中fragment的生命周期方法。添加fragment供FragmentManager管理时,onAttach(Context)、onCreate(Bundle)、onCreateView()方法会被调用。
托管activity的onCreate(Bundle)方法执行后,onActivityCreated(Bundle)方法也会被执行。
如果activity已经处于运行状态,此时添加fragment,FragmentManager会立即驱赶fragment,调用一系列必要的生命周期方法,快速跟上activity的步伐(与activity的最新状态保持同步)。
采用fragment的应用架构
fragment很灵活、具有很强的复用性。但是并不是为了复用组件就要把每一个组件用fragment来封装。应该仅仅封装关键组件,如果单屏就使用大量的fragment,不仅应用代码充斥着fragment事务处理,模块的职责分工也会不清晰。如果有很多零碎小组件想要复用,比较好的架构设计是使用定制视图(custom view)。一般来讲,单屏最多使用2-3个fragment。
网友评论