一、引言

我相信一定有人想通过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. [转]redis配置文件redis.conf的详细说明

    转自: http://www.sufeinet.com/thread-8047-1-1.html # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格 ...

  2. poj 2348 Euclid's Game 题解

    Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9023   Accepted: 3691 Des ...

  3. 接口隔离原则(Interface Segregation Principle,ISP)

    接口隔离原则: 1.使用多个专门的接口比使用单一的总接口要好. 2.一个类对另外一个类的依赖性应当是建立在最小的接口上的. 3.一个接口代表一个角色,不应当将不同的角色都交给一个接口.没有关系的接口合 ...

  4. SQL Server 2005 分区表实践——分区切换

    本文演示了 SQL Server 2005 分区表分区切换的三种形式: 1. 切换分区表的一个分区到普通数据表中:Partition to Table: 2. 切换普通表数据到分区表的一个分区中:Ta ...

  5. head first--------------state pattern

    head first----------浅谈状态模式     状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类     实现代码如下:      package com.cl ...

  6. leetcode Roman Integer

    class Solution { public: int romanToInt(string s) { if (s.length() < 1) return 0; map<char,int ...

  7. Java语言:JAVA8 十大新特性详解(zz)

    关键词: Lambda表达式.函数式接口.方法与构造函数引用.接口的默认方法 原文地址: http://www.jb51.net/article/48304.htm 本教程将Java8的新特新逐一列出 ...

  8. CentOS7安装openjdk、tomcat和mysql流程介绍

    首先是前戏,推荐一个远程工具Xshell和Xftp搭配使用,以下是Xshell的官网 http://www.netsarang.com/products/xsh_overview.html 1.ope ...

  9. jQuery对象初始化的多种传参数形式

    jQuery对象初始化的传参方式包括:1.$(DOMElement)2.$('<h1>...</h1>'), $('#id'), $('.class') 传入字符串, 这是最常 ...

  10. Java Math.sqrt()方法

    描述 java.lang.Math.sqrt(double a) 返回正确舍入的一个double值的正平方根.特殊情况: 如果参数是NaN或小于为零,那么结果是NaN. 如果参数是正无穷大,那么结果为 ...