0%

UI fragment和fragment管理器

一、UI设计的灵活性要求

开发一个由两个Activity组成的列表明细类应用就可以了,一个activity负责管理记录列表,另一个负责管理记录明细界面,点击列表中某条记录会启动其明细activity实例,按后退键会销毁明细activity并返回到记录列表activity界面,想看记录,同样操作。理论上这样可行,但是如果应用需要更复杂的用户界面呈现及跳转,怎么办?

  • 比如在平板上运行app,平板尺寸较大,有足够的空间,能够同时显示列表和记录明细
  • 假设用户正在手机上查看记录明细,并想查看列表中的下一条记录信息,如果能够返回列表界面,滑动屏幕就能够查看下一条记录就好了,每滑动一次屏幕,应用便自动切换到下一条记录明细。
  • activity本身不具有这样的灵活性。activity视图可以在运行时切换,但控制视图的代码必须在activity中实现,结果,各个activity还是得和特定的用户界面紧紧绑定。

二、 引入fragment

fragment可绕开Android的系统中activity使用规则的限制。
fragment是一种控制器对象,activity可以委派它执行任务,这些任务通常用来管理用户界面,受管的用户界面可以是一整屏或是屏幕的一部分。

activity视图可以预留位置供fragment视图插入。
应用怎么支持同屏显示列表和明细内容?由列表fragment和明细的fragment组成,明细视图负责显示列表项的明细内容。选择不同的列表项就显示对应的明细视图,activity负责以一个明细fragment替换另一个明细fragment,这样,视图切换的过程中,就不要销毁activity了,fragment的作用就在这里

1,CriminalIntent应用中,新建一个CrimeFragment的UI fragment管理用户界面,再设计一个名为CrimeActivity的activity来托管CrimFragment实例。可以这样理解,activity在其视图层级预留一处位置,用来放置fragment视图,如下图所示,fragment本身没有在屏幕上显示视图的能力。因此,只有将它的视图放置在activity的视图层级结构中,fragment视图才能显示在屏幕上。



上图就是CrimeFragment托管CrimeFragment的示意图。
CrimeFragment是个大项目,借助对象可以更好理解它,下面UML图展示了CriminalIntent项目设计的对象以及对象之间的关系。



CrimeActivity的作用与activity在GeoQuiz应用中的作用差不多,都负责创建并管理用户界面,以及与模型对象进行交互。Crime、CrimeActivity、CrimeFragment是我们要开发的类。
2,两类fragment
fragment是在API11引进的,最初就是为了平板而设计的,当时google也发布了第一台平板(API 11),可以说,UI要灵活,最初就是为了平板这样的大屏幕设备,现在Google有两个版本的fragment实现可供选择:原生版本和支持库版本。
原生版本内置在系统中,支持库版本的fragment在类库里,发布时,会打包在应用里。显然支持库fragment的应用,无论在哪台设备上运行,都有相同的表现。所以建议使用支持库中的fragment。

三、 在Android studio增加依赖关系

支持库中的fragment在AppCompat库中,要使用Appcompat支持库,项目必须将其添加到依赖关系,在build.gradle文件中设置。

1
implementation 'com.android.support:appcompat-v7:28.0.0'

四、 完整的CriminalIntent项目解析

CriminalIntent项目