Fragment应该知道的一切(1)
1、Fragment是什么
Fragment是“碎片、片段”的意思。Fragment是可放置在Activity中的应用程序的用户界面或行为的一部分,使应用能够提供可以在大屏幕设备与小屏幕设备之间进行调节的布局。
2、出现的原因
当您成为Android开发人员时,学会使用的第一个类是Activity类。 毕竟,Activity类为应用程序提供了一个用户界面。 通过在活动中组织用户界面组件,该活动成为绘制应用程序杰作的画布。 在Android的早期,直接在一个活动中构建一个应用程序的用户界面工作的很好。 大部分早期应用程序都具有相对简单的用户界面,并且不同的Android设备形式因素的数量很小。 在大多数情况下,借助少量布局资源,单个活动可以跨越不同的设备形状。
而后来,Android设备的外形多种多样,其尺寸和形状都有令人难以置信的变化。当将其与现代Android应用程序的高度交互式用户界面相结合时,创建单一活动来有效管理跨越这些不同形状因素的用户手机界面变得非常困难。一个可能的解决方案是定义一个Activity:为设备外形的一个子集提供用户体验 - 例如智能手机;然后,可以定义另一个针对不同形式因素子集的Activity,例如平板电脑。这种方法的问题在于,除了简单地呈现用户界面之外,Activity往往具有许多业务逻辑。由于多个Activity执行的是基本相同的任务,因此必须复制每个Activity中的逻辑,或者通过找出共享Activity间逻辑的方式(例如创建可能复杂的继承关系)来增加程序的复杂性。针对不同形式因素使用不同Activity的方法也大大增加了程序中的Activity数量,实现了所需活动数量的两倍或三倍。此外,Google的材料设计规范的出现进一步增加了每个Activity中包含的代码的复杂性。因此需要一个更好的解决方案,能够将应用程序的用户界面模块化,可以根据需要在Activity中添加需要的部分;Fragment就是解决方案。 Fragment允许我们将用户界面划分为用户界面组件和逻辑的功能组。一个Activity可以根据给定设备形状的需要加载和排列Fragment。Fragment负责形式因素细节,而Activity管理整个用户界面问题。Fragment也可以在简化材料设计应用的方式中对用户界面组件进行分组时发挥重要作用。
3、Fragment的特点
Fragment在API Level 11 (Android 3.0)引入到程序,时至今日,超过95%的android设备支持Fragment。
Fragment和Activity之间的关系:
Fragment类可以用许多方法来实现各种各样的结果。在它的核心中,它表示在一个更大的Activity中运行的特定操作或接口。Fragment与它所处的Activity密切相关,不能单独使用。尽管Fragment定义了自己的生命周期,但生命周期依赖于它的活动:如果活动停止,它内部的任何片段都不能启动;当活动被破坏时,所有碎片都将被销毁。
Fragment的所有子类都必须包含一个公共无参数构造函数。框架通常会在需要时重新实例化一个片段类,特别是在状态恢复期间,并且需要能够找到这个构造器来实例化它。如果无参数构造函数不可用,则在状态恢复期间会发生运行时异常。
4、简单的使用
需求:使用Fragment处理设置界面的逻辑功能
1.创建界面布局fragment_setting.xml
2.创建SettingFragment
创建SettingFragment必须要继承Fragment,此时会提示导入包有android.suppout.app.Fragment和android.suppout.v4.app.Fragment,此时为了兼容性需要导入v4包的Fragment,否则在一些版本中将导致崩溃。
3.为SettingFragment加载布局资源
Fragment加载布局资源,必须重写Fragment的onCreateView()方法,返回View。如图:
由于onCreateView()方法需要返回一个View,因此通过布局填充器加载进布局资源生成View,并返回。
4.加载Fragment到Activity
在原项目中,新创建一个CommonFragmentActivity,把SettingFragment加载进CommonFragmentActivity,并在MainActivity中添加进入CommonFragmentActivity的按钮,点击能够进入。
1.创建CommonFragmentActivity和布局activity_common_fragment.xml
在activity_common_fragment.xml中,通过标签fragment把SettingFragment进入,并设置唯一标识id。此种方式是通过布局资源的静态加载。
5.进入CommonActivity
Activity的跳转不再细说,不懂得可以看Activity应该知道的一切(1),效果如图: