Activity托管Fragment的流程、由来与相互关系
1.理解
托管:
Activity有自己的View,Fragment也有自身的View,但是Fragment自身不具有显示在屏幕的能力。Activity有SetContentView()方法。
Fragment要把自身的View嵌入到Activity的view层级结构里,才能显示。
Activity的View需要提供一处位置来放置Fragment的View。
UI Fragment:
管理用户界面的fragment被称为UI Fragment。
创建UI Fragment:
- 定义布局文件中的组件,组装界面
理解为:(layout文件夹中的xml视图文件) - 创建Fragment类并设置其view为定义的布局
理解为:(创建继承自Fragment的类,在onCreateView()中通过LayoutInflater将xml布局文件实例化为View类型的实例)
布局文件需要转换为java Class才能被使用,所以才通过LayoutInflater转化为View 类型的java class。
记忆方法:将layout文件夹与LayoutInflater创建关系。 - 通过代码方式,实例化布局文件中包含的组件
理解为:(组件=view.findViewById,再添加组件的事件监听addListener)
- 含义
FragmentActivity:
-
FragmentActivity is a special activity provided in the Support Library to handle fragments on system versions older than API level 11. If the lowest system version you support is API level 11 or higher, then you can use a regular Activity.
2.1 原因
Google在API 11级中引入了Fragment,为了保证兼容旧设备,引入了 支持库,支持库提供了完整的fragment的相关类的实现,最低兼容API 4级。
- 关系
support.V4 提供了2个重要的类:Fragment 与 FragmentActivity。
要使用fragment,activity必须知道如何管理fragment。
FragmentActivity知道如何管理支持的Fragment。
support.V7 提供了: AppCompatActivity
获得FragmentManager的方式
Android 3.0以下:getSupportFragmentManager()
Android 3.0以上:getFragmentManager()
- some others:
Activity is the base class of all other activities, I don't think it will be deprecated.
The relationship among them is:
Activity <<<FragmentActivity <<< AppCompatActivity <<< ActionBarActivity
'<<<' means inheritance(继承) here.
The reference said ActionBarActivity is deprecated(不被赞成的),
use AppCompatActivity instead.
So basically, using AppCompatActivity is always the right choise.
The differences between them:
- Activity is the basic one.
- Based on Activity, FragmentActivity provides the ability to use Fragment.
- Based on FragmentActivity, AppCompatActivity provides features to ActionBar.
ActionBarActivity已经过时,被他的父类AppCompatActivity 代替,所以Active继承AppCompatActivity 就OK。
- 回炉巩固
再巩固一下 依赖 的语义结构:
使用了Maven的坐标模式:groupId:artifactId:version
dependencies{
compile 'com.android.support:support-v4:22.+'
}
groupId:
groupId通常是类库的基础包名,唯一标示了Maven仓库中的依赖类库,比如com.android.support
artifactId: (artifact :n. 人工制品,手工艺品,加工品; 石器;)
artifactId是包中的特定库名,如上例中的support-v4。com.android.support包中有很多不同的库,如support-v7,support-v13,appcompat-v7等等。Google使用basename-vX模式来作为支持库的命名约定。-vX指所支持的最低API级别。
version:
version是指类库的版本号。可以用+号来模糊具体版本。