1、分类号 密级 U D C 编号 本科毕业论文(设计)题目 基于 Android 平台新闻客户端设计与实现 所 在 院 系 计算机学院 专 业 名 称 计算机科学与技术(嵌入式方向) 年 级 2012 级 学 生 姓 名 陶昕星 学 号 1250313034 指 导 教 师 许庆炜 二一六 年 四 月湖北第二师范学院本科毕业论文0湖北第二师范学院毕业论文(设计)原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标
2、明。本人完全意识到本声明的法律结果由本人承担。论文作者签名: 年 月 日湖北第二师范学院本科毕业论文I文献综述1、概述随着PC互联网日趋饱和,智能手机的技术突破,移动互联网发生了井喷式的发展,各种智能终端伴随着通讯技术的进步成为新的阅读平台。其中,移动新闻客户端就是发展迅猛的一种新闻阅读应用。在激烈的市场竞争中,门户网站所开发的移动新闻客户端在下载量和受关注程度上都名列前茅,这与整个市场的发展现状以及门户网站移动新闻客户端的独特优势有密切关系。与传统新闻信息传播方式相比,新闻客户端在新闻呈现方式上,采用了图文并茂方式,既发挥了门户网站新闻报道方式上的专长,又使新闻阅读实现了真正意义上的“随时随
3、地,想看就看”。本文将对移动智能手机平台,移动app,移动新闻客户端优势进行分析和总结。2、主题随着移动互联网的发展,我们的生活正在转变为“万物互联,移动为先”的智能生活方式。在任何一个角落,任何一个物体,只要能够连接上互联网,它就能够和我们的手机进行通讯,手机终端控制窗帘,空调,电灯已经是司空见惯。Android操作系统是由Google 2008年研发发布的一种开源操作系统,发布以来,一直受到人们的追捧,短短几年之间,它就已经在全球市场份额跃居第一。其平台的应用程序数量也是一直处于飙升状态,其中一些生活服务类的应用程序给我们的生活带来了莫大的便利。移动新闻客户端具备传播速度更快,覆盖范围更广
4、,新闻内容更丰富,表现形式更新颖 等优势,使得人们更倾向于选择这种阅读方式。相比于传统的报纸,期刊等阅读方式,新闻客户端阅读更加符合绿色环保,健康生活的生活理念。湖北第二师范学院本科毕业论文3、总结新闻客户端阅读,一种全新的阅读方式,它拥有传统阅读方式无法拥有的特点,这使得新闻客户端阅读方式必是大势所趋,一方面人们利用空闲时间,阅读知识,充实自己,另一方面,可以学习一些生活技能,了解时事,与时俱进。让阅读成为一种习惯,开发一款移动新闻客户端是十分有必要的。四、参考文献1 (美)福思特 著,刘云鹏 译,XML 入门经典(第五版),清华大学出版社 20132 孙卫琴, java 面向对象编程. 电
5、子工业出版社,2006.3 李刚,疯狂 Java 讲义(第三版),电子工业出版社, 20144 明日科技 java 从入门到精通(第 3 版),清华大学出版社,20125 李兴华,名师讲坛 -Android 开发实战经典,清华大学出版社,20126 李刚,疯狂 Android 讲义(第 3 版),电子工业出版社 20157 郭霖,第一行代码,人民邮电出版社,20148 徐宜生, Androide 群英传,电子工业出版社,20159 任玉刚, Android 开发艺术探索,电子工业出版社,201510 (美)霍斯特曼,科内尔著,周立新 译, Java 核心技术 卷 1,机械工业出版社 20141
6、1 鲍凯 Java入门123-一个老鸟的Java学习心得,清华大学出版社,201512 CSDN博客, Android ListView异步加载图片乱序问题,原因分析及解决方案http:/ 为了解决以上的诸多不便,基于Android的新闻客户端也应运而生。通过对Google Android SDK API了解和学习,决定开发一款基于Android平台的新闻客户端应用程序,使Android用户可以方便,快捷的获取新闻资讯。本新闻客户端通过请求网络,将服务器返回的json数据解析显示在用户的手机界面上。本文论述了Android移动新闻客户端的设计和开发实现过程。关键词:Android SDK js
7、on 数据 移动新闻客户端 服务器湖北第二师范学院本科毕业论文IIIAbstractNews content to read basic living necessities of life for everyone.In todays increasingly large amount of information, which requires people to continually intake information to enrich themselves.Newsreader to obtain useful information both need to live, but
8、 also through the News open wide horizons and thinking.But most news reader can only be acquired by way of a fixed time and place, can not be done to get news and information anytime, anywhere, often as a result of these factors, miss a lot of useful information on their own.To solve the above incon
9、venience, Android-based news clients also emerged.Through the Google Android SDK API to learn and become familiar with, we decided to develop to develop an Android-based news client application that allows Android users to easily and quickly access news.The news client by requesting network, json pa
10、rsing data returned by the server is displayed on the users mobile phone interface.This article discusses the Android news mobile client design and development implementation process.Key words: Android SDK json data News mobile client Server湖北第二师范学院本科毕业论文III目 录第 1 章 绪论 11.1 研究背景 .11.2 研究意义 .1第 2 章 新
11、闻客户端开发环境及工具 22.1 新闻客户端开发环境 .22.2 新闻客户端开发工具 .22.3 新闻客户端运行环境 .3第 3 章 基于新闻客户端的概要设计 33.1 新闻客户端需求分析 .33.2 新闻客户端功能描述 .53.3 新闻客户端功能模块划分 .53.4 新闻客户端组成结构图 .63.5 新闻客户端操作流程图 .7第 4 章 新闻客户端开发所用技术 84.1 JSON 数据传输格式 84.2 Gson 类库 84.3 SharedPreference 文件存储 9第 5 章 基于新闻客户端的实现 135.1 Fragment 碎片化 135.4 总体结构和功能模块 .205.4.
12、1 侧边栏功能 205.4.2 新闻模块功能 215.4.2 图片模块功能 225.4.3 段子模块功能 .235.4.4 设置模块功能 .24第 6 章 系统测试 27第 7 章 总结 28湖北第二师范学院本科毕业论文VI参考文献 29致 谢 30湖北第二师范学院本科毕业论文0第 1 章 绪论1.1 研究背景如今,APP模式成为移动互联网最主要的应用形式。其中,移动新闻客户端凭借其丰富的资讯资源,实时的信息推送和方便的社区互动被越来越多的用户认可。在新媒体环境下,读者阅读时间和减少和碎片化趋势,预示着手机阅读的影响范围将会越来越广。手机阅读不仅能快速获取新闻信息,同时契合了碎片化时代读者的便
13、捷性,片段化和主动性的需求。移动新闻阅读作为手机阅读的一种表现形式,采用将图片和文字内容相结合的方式将新闻信息展现给用户,这个方式使用户可以查看不同来源的新闻信息以及不同层次的信息,以最大程度上了解事情的原始缘由,同时可以搜索时间间隔较远的新闻信息。移动新闻客户端市场已经成为移动媒体竞争的焦点,互联网各大门户网站纷纷使出浑身解数希望占领尽可能多的移动新闻客户端市场份额。根据数据显示,在中国,新闻客户端市场排名前三的客户端分别为搜狐新闻,网易新闻和腾讯新闻,其中,这些新闻客户端在功能上过于繁重,对Android的设备系统版本有一定的要求,没有很好地做到向下兼容低版本,在较低版本的手机无法成功安装
14、这些新闻客户端。1.2 研究意义虽然 Google Android N 已经出来了,但是在中国,由于手机制造商系统升级缓慢,据友盟数据显示,大部分的手机的 Android 版本还是在在 Android 4.4 之下,一些公司为节省应用程序的开发成本,仅仅向下兼容到 4.4 版本,导致在低于 4.4版本的手机出现提示“解析包错误”。为了使低版本的手机也能够成功安装新闻客户端,故本项目使用低版本的 Android SDK API 和 Android-support-xxx 支持库API 开发新闻客户端,以满足较早手机用户或者系统无法升级的用户阅读新闻的需要。湖北第二师范学院本科毕业论文1第 2 章
15、 新闻客户端开发环境及工具2.1 新闻客户端开发环境不同于 Web App,Android 原生应用使用 Android SDK 框架提供的 api,基于java 语言开发的,故需配置 Java 相关环境。(1)Windows (2)JDK 1.8(3)Android Studio(4)Genymotion 模拟器和 Android 手机(5)Tomcat 服务器(6)mindjet mindmanager,Microsoft Visio2.2 新闻客户端开发工具开发 Android 应用程序的编译器有很多,其中应用最广泛的即是 Eclispse ADT和 Android Studio,本项目
16、采用的是 Android Studio。Android Studio 具有以下优势:(1)非常强大,非常智能的代码提示和搜索功能。比如一个布局文件名字是layout_topfragment_listview_item_all.xml ,在 eclipse 中,必须要输入layout 开头才能提示后面的,而在 Android Studio 里,只需要输入其中的任意一段,就会出现提示。再比如 Android Studio 会智能预测并给开发者最优的提示,每一次并非给出相同的提示结果。而是开发者最可能用的结果。(2)颜色,图片在布局和代码中可以实时预览,编写布局可以实时预览 UI 效果。(3)跨工程
17、移动,搜索,跳转。(4)支持更完善的插件系统。(5)Android Studio 基于 IntelliJ IDEA,基于 Gradle 构建的,允许通过插湖北第二师范学院本科毕业论文2件自定义构建逻辑。(6)Android 专属的重构和快速修复。Genymotion 模拟器提供 Android 手机的模拟环境,可以将编写的 apk 安装到该模拟器上,实时检查代码的逻辑正确与否,在没有特定版本的 Android 设备时,使用 Genymotion 模拟器可以方便的调试应用程序,本项目使用真机和模拟器相结合的方式完成项目的调试工作。2.3 新闻客户端运行环境该新闻客户端使用 java 语言编写的原
18、生 Android 应用程序,仅运行 Android 系统平台,因项目的 minSdk=9,即向下兼容到 Android 2.3 版本,故可以在 Android 2.3和 2.3 以上的设备安装。2.4 新闻客户端运行效果的适配由于 Android 设备分辨率的多样性,使得开发 android 应用程序时需要考虑android 设备的屏幕适配问题。本项目在布局上没有使用绝对布局,组件的尺寸使用了不同分辨率的下的不同值,代码中设置的像素单位值都经过了平台的相应转换,使得在不同分辨率的设备上能够显示出一致的 UI 效果。湖北第二师范学院本科毕业论文3第 3 章 基于新闻客户端的概要设计3.1 新闻
19、客户端需求分析自从Google在Android 5.0中引入了全新的设计语言Material Design,国内外很多公司将其应用到各自开发的应用程序中,如Google+,OneDrive,印象笔记,知乎,网易。Material Design不再让像素处于同一个平面,而是让他们按照规则处于空间当中,具备不同的维度,它强调根据用户行为凸显核心功能,进而为用户提供操作指引。由于本新闻客户端需要向下兼容到Android 2.3版本,故需要使用Material Design支持类库中的组件,使用到的支持类库有Android-support-v7,Android-support-v4。整个新闻客户端分为
20、侧边栏和内容显示区域,默认情况下,侧边栏隐藏在屏幕左侧,用户可以通过点击Toolbar菜单按钮或者从屏幕左边缘向右滑动使左边侧边栏显示,内容显示区域分为上下两部分,上部分显示轮播图,自动播放显示最新的新闻信息,下部分显示新闻列表信息。主界面设计草图如3-1所示。湖北第二师范学院本科毕业论文4图 3-1 主界面设计草图通过点击侧边栏的不同的item可以切换到不同类别显示界面,其中图片显示界面是采用支持类库中的RecyclerView显示瀑布流的效果。其设计草图如图3-2所示。图 3-2 图片界面设计草图段子界面采用卡片式布局显示方式,该显示方式在垂直于屏幕方式有一定的厚度,看起来像是浮在屏幕上一
21、样,更符合人的视觉效果。其设计草图如图3-3所示。湖北第二师范学院本科毕业论文5图 3-3 段子界面设计草图3.2 新闻客户端功能描述本新闻客户端由诸多Fragment共同显示的,启动该应用后,首先进入的欢迎界面SplashActivity,该界面主要是显示一些logo和预加载一些信息。延时3000ms或者用户触摸了屏幕后,程序自动进入主界面MainActivity,主界面默认显示新闻类信息,在主界面用户可以通过左右滑动查看该类型下不同分类的信息。通过呼出侧边栏,点击其中不同的item,程序根据点击的position,主界面切换到不同的fragment显示不同类型的信息。点击侧边栏的设置选项,
22、程序将会跳转到一个新的设置界面SettingActivity,用户可以点击其中的item,设置App的一些属性。例如:新闻正文的字号大小,图片显示的列数。3.3 新闻客户端功能模块划分根据新闻客户端的需求分析,总结出4个相互独立的模块,包括新闻模块,图片模块,段子模块,设置模块。这四个模块是通过点击滑出的侧边栏item来进行切换的。其中新闻模块下包含头条,娱乐,武汉,历史,校园,科技,汽车等分类;图湖北第二师范学院本科毕业论文6片模块下包含人物,美景,汽车,建筑等分类;段子模块下包含经典语录和搞笑段子;设置模块主要是由设置中心组成的,该设置是一个单独的界面,用户可以通过设置中心,对新闻客户端进
23、行一些系统的设置。功能模块结构如图3-1所示。新闻客户端头条娱乐新闻模块 图片模块 段子模块 设置模块武汉历史校园科技汽车人物美景设置中心经典语录搞笑段子图 3-1 新闻客户端模块图3.4 新闻客户端组成结构图在一些主流的Android手机应用程序中,为了能够在有限的空间内显示更多的组件和信息,通常其主界面显示风格主要分为:底部Tab标签 + 侧边栏和顶部indicator + 侧边栏。该新闻客户端采用了顶部indicator+侧边栏,结合手势滑动,显示更多的信息。侧边栏是由Android中使用非常频繁的应用组件ListView来显示的。ListView组件不像其他组件直接设置内容就能显示,它
24、通常要结合适配器Adapter一起使用,才能将数据显示在应用程序的界面上。ListView显示是Android 中最典型的MVC用例。M: Model指的是要显示的数据,如封装数据的cursor,Array 等;V:view 即是要显示封装好的数据的ListView;C:controller即是Adapter, 用来控制数据如何向ListView中显示,如ArrayAdapter,SimpleAdapter,CursorAdapter等。点击ListView中不同的Item, 主界面FrameLayout 显示不同的 Fragment,如点击ListView的第 0个item ,主界面Fram
25、eLayou中显示NewsContentFragment;点击湖北第二师范学院本科毕业论文7ListView的第1个Item,主界面FrameLayout 显示PhotoContentFragment;点击ListView的第2个Item ,主界面 FrameLayout显示DuanziContentFragment;点击ListView的第3个Item, 启动一个新的 Activity界面,显示设置中心的内容。新闻客户端的组成结构图如 图3-3 所示。图 3-3 新闻客户端组成结构图3.5 新闻客户端操作流程图新闻客户端操作流程图,在Launcher界面点击该新闻客户端icon,启动该应用,
26、进入应用的欢迎界面,展现一些logo信息,当用户触摸屏幕或者等待 3000ms,应用程序自动进入主界面,用户从屏幕左边缘向右滑动,呼出侧边栏,点击其中的不同的item,程序根据点击item 的 position,主界面切换到不同的fragment显示各自的信息。操作流程图如图3-3所示。湖北第二师范学院本科毕业论文8S p l a s h A c t i v i t yS t a r t A p pM a i n A c t i v i t yP o s i t i o n = 0C l i c k L e f t M e n u I t e mP o s i t i o n = 3P o s
27、 i t i o n = 2P o s i t i o n = 1S h o w N e w s C o n t e n t F r a g m e n tS h o wP h o t o C o n t e n t F r a g m e n tS h o w N e w s C o n t e n t F r a g m e n tS h o w S e t t i n g A c t i v i t y结束图 3-3 新闻客户端操作流程图第 4 章 新闻客户端开发所用技术4.1 JSON 数据传输格式JSON(JavaScript Object Notation,JavaScript 对
28、象表示法)是一种轻量级的数据交换格式语言,JSON 是独立于语言的文本格式,这使得 JSON 具备了跨平台的特点,在解析速度方面,JSON 远远快于 XML。在当前移动互联网的蓬勃发展中,JSON 作为服务器和客户端间数据交换格式,正在变得越来越重要。JSON 可用于描述的数据结构主要有以下两种:(1)对象:表示用“”括起来的内容,数据结构为key:value,key:value,.的键值对的结构,在面向对象的语言中,key 为对象的属性,value 为对应的属性值,这个属性值的类型可以是数字,字符串,数组,对象等。(2)JSON 对象:一般以开始,以结尾,在两者之间包含一系列非排序的名称/值
29、对,每一名称/值对之间以分号隔开即可。4.2 Gson 类库Gson 是 Google 提供的用来在 java 对象和 JSON 数据之间进行映射的 java 类库,可以将一个 JSON 字符串转换成一个 java 对象,或者反过来。GSON 和其他现有的湖北第二师范学院本科毕业论文9java json 类库最大的不同是 gson 需要实例化实体类,而不需要使用 annotation来标识需要序列化的字段。Gson 部分常用解析方法:T fromJson(String json, Class classOfT) This method deserializes the specified Js
30、on into an object of the specified class.T fromJson(String json, Type typeOfT) This method deserializes the specified Json into an object of the specified typeString toJson(Object src) This method serializes the specified object into its equivalent Json representation.String toJson(Object src, Type
31、typeOfSrc) This method serializes the specified object, including those of generic types, into its equivalent Json representation.4.3 SharedPreference 文件存储SharedPreferences 是 Android 平台上一个轻量级的存储类,用来保存应用的一些常用配置。它提供了 java 常规的 long、int、String 等类型数据的保存接口,其保存的文件路径为 data/data/应用包名/shared_prefs。用户卸载或清除该应用的
32、数据时,该文件将会被自动删除。SharedPreference 四种操作模式。(1) Context.MODE_PRIVATE:为默认操作模式, 代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。(2) Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.(3) Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。(4) Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。SharedPreference 读写方式:湖北第二师范学院本科
33、毕业论文10写:SharedPreferences sp = getSharedPreferences(String name, int mode);SharedPreferences.Editor editor = sp.edit();editor.put(key,value);mit();读:SharedPreferences sp = getSharedPreferences(String name, int mode);String value = sp.getString(String key, String defValue)4.4 xUtils 框架xUtils 包含了很多实用的
34、android工具,最低兼容android 2.2 (api level 8)目前xUtils主要有四大模块:(1)DbUtils模块:android中的orm框架,一行代码就可以进行增删改查;支持事务,默认关闭;可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);支持绑定外键,保存实体时外键关联实体自动保存或更新;自动加载外键关联实体,支持延时加载;支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。(2)ViewUtils模块:android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
35、新的事件绑定方式,使用混淆工具混淆后仍可正常工作;目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。(3)HttpUtils模块:支持同步,异步方式的请求;湖北第二师范学院本科毕业论文11支持大文件上传,上传大文件不会oom;支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;返回文本内容的请求(默认只启用了
36、GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。(4)BitmapUtils模块:加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;支持加载网络图片和本地图片;内存管理使用lru算法,更好的管理bitmap内存;可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等.4.5 Android SDK 框架Android是一种基于Linux的自由及开放源代码的操作系统,主要使用与移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android系统由linux内核层,系统运行库层,应用
37、程序框架层,应用程序层组成。应用程序层使用应用框架层提供的接口,方法开发应用程序,Android系统架构图如图3-1所示。湖北第二师范学院本科毕业论文12图 3-1 Android 系统架构图4.6 自定义 View当 Android 原生的控件不能满足项目需要时,那就需要使用自定义控件,通常自定义控件有三种实现方式,继承 View 重写 onDraw();继承 ViewGroup 实现特殊的布局控件;继承已有的 view 控件。通过自定义的 View 组件,能够实现一些复杂实用的组件,在满足项目需要的同时,也提高了代码的复用性。本新闻客户端新闻页的轮播图 CarouselView,是继承自
38、ViewGroup,由于将轮播图的实现逻辑封装到了一个 view 类中,所以在新闻页中不用再重复编写实现逻辑,而只是在各自的布局文件中引入即可,提高了代码的内聚性,简易性,通用性和易维护性。显示网页的控件是使用的继承自原有控件类,在其初始化时添加水平进度条,在布局文件中引入时,即是带进度条的 WebView 控件。带 RadioButton 的Dialog 使用继承自原有的 Dialog 类,根据构造函数传入的参数,代码动态创建控件并添加到自定义的 Dialog 中,new 创建控件时,可以使用的不同的参数,创建出不同 RadioButton 个数不同的 Dialog,同时注册的回调接口,使得
39、创建不同的dialog 在用户点击确定执行不同 dialog 各自的保存逻辑,大大提高了代码的复用湖北第二师范学院本科毕业论文13性。4.7 三级缓存策略为提高用户的使用体验,避免应用程序在加载大量图片时出现OOM异常和节省用户的3G流量,通常需要对请求过的数据进行的一定内存缓存或sdcard缓存,使得用户下次在进入时,不开启流量也可以查看到已经请求过度额数据信息。在Android平台中,通常使用LruCache内存缓存和DiskLruCache磁盘缓存。LruCache主要原理是把最近使用的对象用强引用存储在LinkedHashMap中,并且把最近最少使用的对象在缓存值达到预定值之前从内存中
40、移除。通过将LruCache和DiskLruCache结合使用可以很好地解决OOM内存溢出的问题。第 5 章 基于新闻客户端的实现5.1 Fragment 碎片化5.1.1 Fragment 介绍Fragment是Google在Android 3.0(API level 11)中引入的概念,其是为了解决不同屏分辨率的动态和灵活UI设计。Fragment的出现使开发者可以将Activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。在解决平板和手机的布局适配问题上,fragment起着重要的作用。在fragment出现之前,在平板上显示类别分类和该类别下的详细信息,需要使用两个Act
41、ivity显示,导致显示类别的Activity存在大部分的空余空间,降低了用户的使用体验,而在出现了fragment之后,只需在同一个Activity中添加两个fragment,一个fragment显示类别标题,另一个fragment显示该类别下的详细信息,不但使显示效果变好,而且更容易维护各自的生命周期。湖北第二师范学院本科毕业论文145.1.2 Fragment 生命周期由于Fragment必须嵌入到Activity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的,与Activity生命周期非常相似。比如,如果Activity是暂停状态,其中所有的Fragmen
42、t都是暂停状态;如果Activity是stopped状态这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。Fragment生命周期如图4-1所示。图 4-1 Fragment 生命周期5.1.3 Fragment 与 Activity 交互湖北第二师范学院本科毕业论文15(1)Activity传值给Fragment在Activity中创建Bundle数据包,调用fragment的setArguments(Bundle bundle)方法,将Bundle数据包传给fragment,在fragment中调用getArg
43、uments方法得到传递过来的值。(2)Fragment传值给Activity在fragment中定义一个内部回调接口onItemListener,再让包含该fragment的activity实现该接口,当fragment添加到Activity中时,会调用fragment的onAttach(Activity activity)方法,在这个方法中检查参数activity是否实现了定义的接口,如果实现了,将activity强转成onItemListener的子类实例,并在fragment中点击item时,使用该子类实例调用onItemListener中的回调方法,这样通过回调方法,就将fragme
44、nt中的数据传递给了Activity。5.1.4 Fragment 的使用由于Fragment是在Android 3.0中引入到Android SDK中的,所以在低于Android 3.0需要使用支持类库,即Android-support-v4。本新闻客户端项目中使用了该支持类库,即在build.gradle文件的dependencies中加入compile com.android.support:support-v4:22.1.1。Fragment添加方式有两种:在layout文件中直接声明fragment标签,以及在代码中动态添加。抽取 Fragment 基类。public abstrac
45、t class BaseFragment extends Fragment public AppCompatActivity mActivity;public View rootView;public BaseFragment() /* fragment 创建* param savedInstanceState*/Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);湖北第二师范学院本科毕业论文16mActivity = (AppCompatActivity) get
46、Activity();/* fragment 初始化布局* param inflater* param container* param savedInstanceState* return*/Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) if (rootView = null) rootView = initBaseView();return rootView;/* fragment 依附的 Activity 创建完成* para
47、m savedInstanceState*/Overridepublic void onActivityCreated(Nullable Bundle savedInstanceState) super.onActivityCreated(savedInstanceState);initData();setListener();Overridepublic void onDestroyView() super.onDestroyView();if (rootView != null) (ViewGroup) rootView.getParent().removeView(rootView);p
48、ublic abstract View initBaseView();public void initData() public void setListener() 湖北第二师范学院本科毕业论文17(4)新闻客户端 Fragment 继承,部分 Fragment 继承关系如 4-2 所示。+ o n A t t a c h ( )+ o n C r e a t e ( )+ o n C r e a t e V i e w ( )+ o n A c t i v i t y C r e a t e d ( )+ o n S t a r t ( )+ o n R e s u m e ( )+ o n P a u s e ( )+ o n S t o p ( )+ o n D e s t o r y V i e w ( )+ o n D e t a c h ( )F r a g m e n t+ o n C r e a t e ( ) : v o i d+ o n C r