第6章Android SDK版本与兼容
6.1Android SDK 版本
6.2Android编程与兼容性问题
6.2.1全新的系统版本——Honeycomb
6.2.2SDK最低版本
6.2.3SDK目标版本
6.2.4SDK编译版本
6.2.5安全添加新版本API中的代码
6.3使用Android开发者文档
http://developer.android.com/
第7章 UI fragment与fragment管理器
7.1UI设计的灵活性需求
activity自身并不具有灵活性,activity视图可以在运行时切换,但控制视图的代码必须在activity中实现。因而,各个activity还是得和特定的用户紧紧绑定在一起。
7.2fragment的引入
采用fragment而不是activity进行应用的UI管理,可绕开Android系统activity规则的限制。
fragment是一种控制器对象,activity可以委派它完成一些任务,通常这些任务就是管理用户界面。受管的用户界面可以是一整屏或是整屏的一部分。
管理用户界面的fragment又称为UI fragment。他也有自己产生于布局文件的视图。fragment视图包含了用户可以交互的可视化UI元素。
activity视图含有可供fragment视图插入的位置。如果有多个fragment要插入,activity视图也可以提供多个位置。
根据应用和用户的需求,可联合使用fragment及activity来组装或重新组装用户界面。
*达成这种灵活性的代价是更加复杂的应用、更多的不见管理以及更多的实现代码。
7.3开发示例 P109
fragment支持库android-support-v4.jar
FragmentActivity是Activity的子类,具有新系统版本Activity类管理fragment的能力,即便是在较早版本的Android设备上也可以对fragment进行管理。
用法是将其作为Activity的超类
7.4托管UI fragment
为托管UI fragment,activity必须做到:(1)在布局中为fragment的视图安排位置
(2)管理fragment实例的生命周期
7.4.1 fragment的生命周期
fragment的生命周期类似于activity。
*关键区别在于,fragment的生命周期方法是由托管activity而不是操作系统调用的。操作系统无从知晓activity用来管理视图的fragment,其实用是activity自己内部的事情。
7.4.2 托管的两种方式
(1)添加fragment到activity布局中
*简单但不够灵活,也不是一无是处
(2)在activity代码中添加fragment
*是唯一一种可以在运行时控制fragment的方式,我们可以决定何时将fragment添加到activity中及随后可以完成何种具体任务,也可以移除fragment,用其他fragment代替当前fragment,然后再重新添加易译移除的fragment。
7.4.3 定义容器视图
虽然我们要在托管activity代码中添加UI fragment,但还是需要在activity视图层级结构中为fragment视图安排位置。托管activity布局还可定义多个容器视图。
7.5创建UI fragment
步骤与创建一个activity的步骤相同:(1)通过定义布局文件中的组件,组装界面
(2)创建fragment类并设置其视图为定义的布局
(3)通过代码的方式,连接布局文件中生成的组件
1、实现fragment生命周期方法
注意:在Fragment.onCreate()方法中,并没有生成fragment的视图。虽然在Fragment.onCreate()方法中配置了fragment实例,但创建和配置fragment视图是通过另一个fragment声明周期方法onCreateView()来完成的。
2、在fragment中关联组件
7.6 添加UI fragment到FragmentManager
Fragment类引入到Honeycomb时,为协同工作,Activity类被更改为含有FragmentManager类。该类负责管理fragment并将他们的视图添加到activity的视图层级结构中。
具体管理的是:
(1)fragment队列
(2)fragment事务的回退栈
7.6.1fragment事务
fragment事务被用来添加、移除、附加、分离或替换fragment队列中的fragment。
这是使用fragment在运行时组装和重新组装用户界面的核心方式。
FragmentManager管理着fragment事务的回退栈。
7.6.2 FragmentManager与fragment生命周期
P126
7.7activity使用fragment的理由
实际开发中最可能使用的模式。等到需要时再添加时会产生很多问题同时带来毫无意义的内部差异。
7.8 深入学习:Honeycomb、ICS、Jelly Bean以及更高版本系统上的应用开发
四处调整:(1)设置应用的编译目标以及SDK最低版本为API 11级或更高
(2)放弃使用FragmentActivity类,转而使用标准库中的Activity类(android.app.Activity)。activity默认支持API 11或更高版本中的fragment
(3)放弃使用android.support.v4.app.Fragment类,转而使用android.app.Fragment类
(4)放弃使用getSupportFragmentManager()方法获取FramentManager,转而使用getFragmentManager()方法
第8章 使用布局与组件创建用户界面
8.1开发实例 P128
8.2更新布局
8.3生成并使用组件
8.4深入探讨XML布局属性
8.4.1样式、主题及主题属性
样式(style)是XML资源文件,含有用来描述组件行为和外观的属性定义
使用主题属性引用可将预定义的应用主题样式添加给指定组件,可以确保组件在在应用中拥有正确一致的观感。
8.4.2dp、sp以及屏幕像素密度
dp:意为密度无关像素,无论屏幕密度如何,总能获得同样的尺寸
sp:意为缩放无关像素。通常用来设置屏幕上的字体大小
pt、mm、in:类似于dp的缩放单位,实际开发不建议使用
。。。。。。。。。。。。。。。。没保存上
第10章 使用fragment argument
10.1从fragment中启动activity
实现方式基本等同与从activity中启动另一activity的实现方式。
我们调用Fragment.startActivity(Intent)方法,该方法在后台会调用对应的Activity方法
10.1.1附加extra信息
创建了显示intent后,调用putExtra(...)方法,传入相应***Id 的key值
10.1.2 获取extra信息
fragment有两种方式获取保存在activity的intent内的数据信息,即简单直接的方式(直接使用getActivity()和getIntent()方法)和复杂灵活的方式(涉及fragment argument的概念)
10.1.3使用***对象的数据更新***Fragment视图
10.1.4直接获取extra信息方式的缺点
这种方式以牺牲fragment的封装性为代价,***Fragment不再是可服用的构建单元,因为它总是需要有某个具体activity托管着。这也意味着,按照当前的编码实现,***Fragment再也无法用于任何其他的activity了
较好的办法是将m***Id存储在**Fragment的某个地方,而不是保存在***Activity的私有空间里。这样无需依赖其intent内制定extra的存在,***Fragment就能获取自己所需的extra数据信息,这某个地方实际就是它的arguments bundle
10.2fragment argument
每个fragment实例都可附带一个Bundle对象。改bundle包含有key-value对,我们可以如同附加extra到Activity的intent中那样使用它们。一个key-value对即一个argument。
要创建fragment argument,首先需创建Bundle对象。然后,使用Bundle限定类型的“put”方法(类似于Intent的方法),将argument添加到bundle中
10.2.1附加argument给fragment
需调用Fragment.setArguments(Bundle)方法。必须在fragment创建后、添加给activity前完成
习惯做法是:添加名为newInstance()的静态方法非Fragment类。使用该方法,完成fragment实例及bundle对象的创建,然后将bundle放入argument中,最后再附加给fragment。
10.2.2获取argument
先调用Fragment类的getArguments()方法,接着再调用Bundle的限定类型的“get”方法,如getSerializable()
10.3重新加载显示列表项
要保证fragment视图得到刷新,在onResume()方法内更新代码是最安全的选择
10.4通过fragment获取返回结果
第11章 使用ViewPager
通过滑动屏幕,切换查看不同列表项的明细页面
11.1创建***PagerActivity
11.1.1