2024年3月21日发(作者:)
Android中Fragment的应用
转载
标签:
fragment
android
杂谈
Fragment 表现 Activity 中用UI的一个行为或者一部分. 可以组合多个fragment放在一个单
独的activity中来创建一个多界面区域的UI,并可以在多个activity里重用某一个fragment.把
fragment 想象成一个activity的模块化区域, 有它自己的生命周期, 接收属于它的输入事件,
并且可以在activity运行期间添加和删除.
Fragment 必须总是被嵌入到一个activity中, 它们的生命周期直接被其所属的宿主activity
的生命周期影响. 例如, 当activity被暂停,那么在其中的所有fragment也被暂停; 当activity
被销毁, 所有隶属于它的fragment也被销毁. 然而,当一个activity正在运行时(处于resumed
状态), 我们可以独立地操作每一个fragment, 比如添加或删除它们. 当处理这样一个
fragment事务时, 也可以将它添加到activity所管理的back stack -- 每一个activity中的back
stack实体都是一个发生过的fragment事务的记录. back stack允许用户通过按下 BACK 按键
从一个fragment事务后退(往后导航).
将一个fragment作为activity布局的一部分添加进来时, 它处在activity的view hierarchy中
的ViewGroup中, 并且定义有它自己的view布局.通过在activity的布局文件中声明fragment
来插入一个fragment到你的activity布局中, 或者可以写代码将它添加到一个已存在的
ViewGroup.然而, fragment并不一定必须是activity布局的一部分; 也可以将一个fragment作
为activity的隐藏的后台工作者.
本文档描述了如何使用fragment创建你的应用程序, 包括:当被添加到activity的back stack
后, fragment如何维护他们的状态. 在activity中,与activity和其他fragment共享事件.构建到
activity的action bar.以及更多内容.
设计哲学
Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上--例如平板电脑上,
支持更加动态和灵活的UI设计. 平板电脑的屏幕要比手机的大得多,有更多的空间来放更多
的UI组件,并且这些组件之间会产生更多的交互.Fragment允许这样的一种设计,而不需要你
亲自来管理view hierarchy的复杂变化. 通过将activity的布局分散到fragment中, 你可以在
运行时修改activity的外观, 并在由activity管理的back stack中保存那些变化.
例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表, 然后在屏幕
右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,
并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输入事
件. 因此, 取代使用一个activity来选择一篇文章,而另一个activity来阅读文章 的方式, 用户
可以在相同的activity中选择一篇文章并且阅读, 如图所示:
fragment在你的应用中应当是一个模块化和可重用的组件. 即,因为fragment定义了它自己
的布局, 以及通过使用它自己的生命周期回调方法定义了它自己的行为, 你可以将fragment
包含到多个activity中. 这点特别重要, 因为这允许你将你的用户体验适配到不同的屏幕尺
寸.举个例子, 你可能会仅当在屏幕尺寸足够大时,在一个activity中包含多个fragment, 并且,
当不属于这种情况时,会启动另一个单独的,使用不同fragment的activity.
继续之前那个新闻的例子 -- 当运行在一个特别大的屏幕时(例如平板电脑), app可以在
Activity A中嵌入2个fragment. 然而,在一个正常尺寸的屏幕(例如手机)上,没有足够的空间同
时供2个fragment用, 因此, Activity A 会仅包含文章列表的fragment, 而当用户选择一篇文
章时, 它会启动Activity B, 它包含阅读文章的fragment. 因此, 应用可以同时支持图1中的2
种设计模式.
创建Fragment
要创建一个fragment, 必须创建一个 Fragment 的子类 (或者继承自一个已存在的它的子
类). Fragment 类的代码看起来很像 Activity .它包含了和activity类似的回调方法, 例如
onCreate(), onStart(), onPause, 以及 onStop(). 事实上, 如果你准备将一个现成的Android应
用转换到使用fragment, 你可能只需简单的将代码从你的activity的回调函数分别移动到你
的fragment的回调方法.
通常, 应当至少实现如下的生命周期方法:
onCreate()
当创建fragment时, 系统调用此方法.
在实现代码中, 应当初始化想要在fragment中保持的必要组件, 当fragment被暂停或者停止
后可以恢复.
onCreateView()
fragment第一次绘制它的用户界面的时候, 系统会调用此方法. 为了绘制fragment的UI, 此
方法必须返回一个View, 这个view是你的fragment布局的根view. 如果fragment不提供
UI, 可以返回null.
onPause()


发布评论