一、引言

我相信一定有人想通过Intent传送自定义类型的数据,但是苦于无法找到putExtra(String name,Object value)这个方法,最后都会妥协,采用字典或者全局变量来

解决,但是你一定也看到了以下这个方法pubExtra(String name,Parcelable value),我相信那些懒惰的人们,可能会一概而过。却不曾想你错失了良机。下面我们将会

全面的介绍如何使用Parcelable(这个是接口,并不是一个类)

二、正文

首先我们看下需要实现这个方法的哪些部分:

其中只有writeToParcel方法是重点,因为这个方法就是将我们这个类的数据写入到Parcel中以便传递。但是这里告诉你一个悲剧的事情,那就是Parcel只有

writeXXXX(XXXX value),readXXXX() 方法,其中XXXX表示的是数据类型。这里要重点注意的是writeXXXX是没有name参数的,这就以为着你无法区分同一种类型数据

具体是什么。但是Parcel提供一个方法 setDataPosition(int pos) 方法。等同于可以切换当前添加数据的索引,就好比我们用了Parelable数组一样的效果,填充好

了一个Parelable的数据之后使用setDataPosition切换到下一索引继续填充数据。

下面是一个示例:

在这里我们这个类只有一个mData变量,并且在方法writeToParcel中将这个变量写到了Parcel中,但是到这里并没有结束。你可以简单的想想,这里我们仅仅将数据存到了Parcel中,

但是怎么恢复数据呢?因为最后Intent是通过Parcel类进行实际的数据传送,等传送到目的之后,当然还需要恢复,所以我们还要实现一个接收Parcel类的构造方法:

到这里我们仅仅是入门了,如果你是有心人可以将鼠标点到这个类的名称部分会看到以下的提示:

显然我们并没有好好的完成这个功能,我们还缺少一个CREATOR字段,当然要求创建这个字段并不是毫无意义的,而且对这个字段也

有要求,必须是Parcelable.Creator<T>类型,其中的T就是我们需要从Parcel转换到的目的类型。

既然我们知道还缺少东西,下面我们就补全:

这里需要讲述的是 writeToParcel 和 createFromParcel 这两个方法,在实际传递过程中,当我们把这个自定义类型作为Intent的参数进行传

递时writeToParcel会被调用,意思就是告诉你可以将你的数据封装了,然后到了目的之后再通过调用createFromParcel将封装的数据再恢复回去。

这样就可以将数据的转换全部封装到数据类中,而无需以后在使用的过程中去转换。

Android开发之使用Intent进行自定义类型数据传输的更多相关文章

  1. Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...

  2. Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)

    前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...

  3. Android开发-API指南-Intent和Intent过滤器

    Intents and Intent Filters 英文原文:http://developer.android.com/guide/components/intents-filters.html 采 ...

  4. Android开发中使用Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...

  5. Android开发-取消程序标题栏或自定义标题栏

    注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 在Android开发中,跟据需要我们有时候需要自定义应用程序的标题栏或者取消程序的标题栏,下面本菜鸟在此记录与分享一下自己使用的方法 ...

  6. Android开发学习之Intent具体解释

    Intent简单介绍和具体解释:           Intent:协助应用间的交互与通信,Intent负责相应用中一次操作的动作.动作涉及的数据.附加数据进行描写叙述.               ...

  7. 从零开始学android开发-详细谈谈intent的startActivityForResult()方法

    1.两种实现activity跳转的方法 实现activity的跳转主要有两种方法,startActivity()和startActivityForResult();例如activity A跳转到act ...

  8. Android开发常用的Intent的URI及示例

    参考资料:http://www.oschina.net/code/snippet_166763_6502 //以下是常用到的Intent的URI及其示例,包含了大部分应用中用到的共用Intent. / ...

  9. android 开发 获取各种intent (图片、apk文件、excel、pdf等文件)

    public static Intent openFile(String filePath){ File file = new File(filePath); if(!file.exists()) r ...

随机推荐

  1. MongoDB 分布式部署教程

    本文将介绍如何使用 MongoDB 提供的 Replica Set 和 Shards 功能构建一个分布式 MongoDB 集群. Replica Set 部署 我们先从部署一个三节点的 Replica ...

  2. HttpAsyncClient的连接池使用

    代码示例 public static void main(String[] args) throws Exception { ConnectingIOReactor ioReactor = new D ...

  3. andengine的convertLocalCoordinatesToSceneCoordinates方法

    使用Tile地图,看过andengine中的例子,都会发现例子中有这么一段话,以前版本的是convertLocalToSceneCoordinates方法. scene.registerUpdateH ...

  4. 领扣-754 到达终点数字 Reach a Number MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. Laravel SQL 查询语句集锦

    1.从数据表中取得单一数据列 $user= DB::table('users')->where('name','John')->first(); 2.检索表中的所有行 复制代码代码如下: ...

  6. Struts2环境搭建及实例解析

    与struts1框架的使用一样,struts2的环境搭建及使用同样分为以下几个步骤: 1.      引入jar包(这里以struts2.2.3为例),所需jar包有以下几个: a)        s ...

  7. IDEA初使用:解决搜狗输入法不跟随BUG

    IDEA初使用:解决搜狗输入法不跟随BUG https://blog.csdn.net/qq_27905183/article/details/79119237 嗯,学习了: 然而,效果不明显:

  8. (转)溶解shader

    游戏中物体腐化消失,燃烧消失时,会有从局部慢慢消失的效果,然后配合一些粒子特效,就能达到非常好的美术效果.类似效果如下: 注:_DissColor为溶解主色,_AddColor为叠加色,按照溶解的移动 ...

  9. Using Timers in MFC Applications

    Timer Events in MFC Applications Event timers are always handy to have around and useful in nearly e ...

  10. Android改动包名称规范方法

    第一步.在项目上右键,选择android tools->rename application package,输入须要改为的名称,然后选择须要替换的文件里的包名.这里仅改动了project中包括 ...