A Fragment represents a behavior or a portion of user interface in an Activity. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section of an activity, which has its own lifecycle, receives its own input events, and which you can add or remove while the activity is running (sort of like a “sub activity” that you can reuse in different activities).
上面是谷歌官方对于Fragment的介绍。主要说明了Fragment和Activity之间的关系,谷歌官方推出Fragment是希望它能在在一些特定的场合替代Activity。它比Activity更灵活,可以作为Activity的一个模块,同时可以被多个Activity重用,最重要的是:Fragment有自己独立的生命周期,接受自身的事件输入。同时,可以在Activity运行期间添加或移除。
应当理解fragment的优势:灵活。因此一些内容时常会变化的场景下,比如照片的浏览。
同时需要注意的是Fragment必须嵌入到一个Activity当中,而且Activity的生命周期会直接影响到Fragment的生命周期。Activity被销毁的同时,Fragment也会被销毁,只有在Activity处于Running状态Fragment才能执行添加或移除操作。
Fragment可以被添加进管理Activity的堆栈当中,会记录下Fragment当中发生的事务。这个堆栈允许用户通过back键,改变Fragment的事务。这一点是很重要,这样我们可以用Fragment代替几乎所有的Activity。
Fragment可以作为Activity布局中的一个模块,在ViewGroup的内部视图层,Fragment可以定义自己的布局文件。通过<fragment>字段声明。也可以通过代码添加到ViewGroup当中。甚至,fragment可以不作为layout的一部分,可以没有UI作为一个不可见的活动。
Design Philosophy
Android introduced fragments in Android 3.0 (API level 11), primarily to support more dynamic and flexible UI designs on large screens, such as tablets.
安卓主要是为了针对大屏设备而推出的fragment,以便支持更多动态的灵活的UI设计。
如上图所示:相同的fragment组件在屏幕尺寸不一样的设备上可以有不同的展示,这样便于开发者开发适用各种设备的应用。
Creating a Fragment
创建一个fragment必须继承fragment(或者已有的子类)。fragment的代码和Activity的代码很相似,有很多的相同的生命周期函数。
通常情况下我们只用重写fragment的如下方法:
onCreate()
系统在创建fragment的时候会调用这个方法,我们应当在该方法当中实现基本组件的初始化,这些基本组件在fragment暂停或停止的时候能够保存,当fragment resume的时候能够重现。
onCreateView()
系统会在fragment第一次绘制UI的时候调用该方法。该方法必须返回一个View,这个View应当是fragment的layout。如果fragment不提供任何UI,可以返回null。
onPause()
系统调用该方法,表示用户将要离开这个fragment(这并不意味着fragment会被销毁)。通常我们会在这里提交一些需要被持久化的参数(因为,用户可能不会再进入该fragment)。
大部分应用至少会重写这三个方法,还有一些别的回调方法可以用来处理fragment的各个生命周期。