个人对Fragment的一些理解

来源:互联网 发布:矩阵的谱范数怎么求 编辑:程序博客网 时间:2024/05/18 01:33

前一阶段在一个项目中不断使用Fragment,加上网上一些资料,对fragment一些简单的了解。

在工程中对Fragment和Activity使用上如何选择

首先说一句,在不同的项目中,对于一个页面要使用Fragment实现还是使用Activity来实现要根据实现难易程度和具体要求来抉择,自己在无纸化会议里面主要使用的是Fragment,大约十五个功能点(不包含登录)使用了大约二十来个Fragment页面来实现,整个工程就两个Activity(登录和MainActivity),这就给我造成了一个误区就是在以后的尽量使用Fragment,这样是不对的,因为每个项目有不同的需求和场景,在广告管理项目中由于这个误区让我在做页面跳转和页面传值的时候有不小的困难。
Fragment在切换和嵌套时,使用起来确实比较方便,而且性能相对来说比较好,但是在超多三层和三层以上的嵌套时候就会出现一些问题,主要集中在传值和切换上。为了提高用户体验,所以在项目中我使用的Fragment切换为show/hide组合来实现的 ,如果使用add/replace来实现传值问题也比较好解决。因为每次都创建一个新的对象。
说这些主要是想提醒自己,不要陷入Fragment的误区,不要想着什么都用Fragment来实现,因地制宜,是最好的。
下面简单介绍一些Fragment相关知识。

什么是Fragment, 为什么出现Fragment

Fragment是 Android 3.0 提出来的,其主要目的是解决不同屏幕的食品问题和灵活的UI设计。
fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activity 的外观,并且由activity 管理的back stack 中保存些变化。当一个片段指定了自身的布局时,它能和其他片段配置成不同的组合,在活动中为不同的屏幕尺寸修改布局配置(小屏幕可能每次显示一个片段,而大屏幕则可以显示两个或更多)。
  Fragment必须被写成可重用的模块。因为fragment有自己的layout,自己进行事件响应,拥有自己的生命周期和行为,所以你可以在多个activity中包含同一个Fragment的不同实例。

Fragment的优点

Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。
Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。
Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。
Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。
Fragment 解决Activity间的切换不流畅,轻量切换。
Fragment 替代TabActivity做导航,性能更好。
可以从startActivityForResult中接收到返回结果,但是View不能。

Fragment的生命周期

Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,它拥有的所有的Fragment们都暂停了,当activity销毁时,它拥有的所有Fragment们都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),你可以单独地操作每个Fragment,比如添加或删除它们。当你在执行上述针对Fragment的事务时,你可以将事务添加到一个棧中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。
显示Fragment时(跟用户交互)要调用的核心的生命周期方法如下:
1. 把Fragment对象跟Activity关联时,调用onAttach(Activity)方法;
2. Fragment对象的初始创建时,调用onCreate(Bundle)方法;
3. onCreateView(LayoutInflater, ViewGroup, Bundle)方法用于创建和返回跟Fragment关联的View对象;
4. onActivityCreate(Bundle)方法会告诉Fragment对象,它所依附的Activity对象已经完成了Activity.onCreate()方法的执行;
5. onStart()方法会让Fragment对象显示给用户(在包含该Fragment对象的Activity被启动后);
6. onResume()会让Fragment对象跟用户交互(在包含该Fragment对象的Activity被启恢复后)。
Fragment对象不再使用时,要反向回调的方法:
1. 因为Fragment对象所依附的Activity对象被挂起,或者在Activity中正在执行一个修改Fragment对象的操作,而导致Fragment对象不再跟用户交互时,系统会调用Fragment对象的onPause()方法;
2. 因为Fragment对象所依附的Activity对象被终止,或者再Activity中正在执行一个修改Fragment对象的操作,而导致Fragment对象不再显示给用户时,系统会调用Fragment对象的onStop()方法。
3. onDestroyView()方法用于清除跟Fragment中的View对象关联的资源;
4. Fragment对象的状态被最终清理完成之后,要调用onDestroy()方法;
5. 在Fragment对象不再跟它依附的Activity关联的时候,onDetach()方法会立即被调用

未完待续……….
参考:http://www.cnblogs.com/shaweng/p/3918985.html

0 0
原创粉丝点击