Android开发之使用Intent进行自定义类型数据传输
一、引言
我相信一定有人想通过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进行自定义类型数据传输的更多相关文章
- Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...
- Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)
前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...
- Android开发-API指南-Intent和Intent过滤器
Intents and Intent Filters 英文原文:http://developer.android.com/guide/components/intents-filters.html 采 ...
- Android开发中使用Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...
- Android开发-取消程序标题栏或自定义标题栏
注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 在Android开发中,跟据需要我们有时候需要自定义应用程序的标题栏或者取消程序的标题栏,下面本菜鸟在此记录与分享一下自己使用的方法 ...
- Android开发学习之Intent具体解释
Intent简单介绍和具体解释: Intent:协助应用间的交互与通信,Intent负责相应用中一次操作的动作.动作涉及的数据.附加数据进行描写叙述. ...
- 从零开始学android开发-详细谈谈intent的startActivityForResult()方法
1.两种实现activity跳转的方法 实现activity的跳转主要有两种方法,startActivity()和startActivityForResult();例如activity A跳转到act ...
- Android开发常用的Intent的URI及示例
参考资料:http://www.oschina.net/code/snippet_166763_6502 //以下是常用到的Intent的URI及其示例,包含了大部分应用中用到的共用Intent. / ...
- android 开发 获取各种intent (图片、apk文件、excel、pdf等文件)
public static Intent openFile(String filePath){ File file = new File(filePath); if(!file.exists()) r ...
随机推荐
- Java NIO 的前生今世 之四 NIO Selector 详解
Selector Selector 允许一个单一的线程来操作多个 Channel. 如果我们的应用程序中使用了多个 Channel, 那么使用 Selector 很方便的实现这样的目的, 但是因为在一 ...
- android studio运行时报错AVD Nexus_5X_API_P is already running解决办法
运行刚搭建好的Android环境时会报这种错误: AVD Nexus_5X_API_P is already running. If that is not the case, delete the ...
- Apache URL重写的配置 及其 apache500错误
1:如果apache报500错误时 ----->原因:可能是你的ReWrite模块没有打开(有时在apache重装时会忘记打开该模块) 将apache--->httpd.conf文件中Lo ...
- 《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记
一.mysql架构 mysql是一个单进程多线程架构的数据库. 二.存储引擎 InnoDB: 支持事务 行锁 读操作无锁 4种隔离级别,默认为repeatable 自适应hash索引 每张表的存储都是 ...
- 性能优化 BlockCanary 卡顿监测 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Maven镜像更换为阿里云中央仓库
前言 maven仓库默认在国外,使用难免很慢,尤其是下载依赖的时候,换为国内镜像,让你感受飞一般的感觉.国内支持maven镜像的有阿里云,开源中国等,这里换为阿里云的. 更换 修改maven配置文件s ...
- .NET程序性能优化的基本要领
Bill Chiles(Roslyn编译器的程序经理)写了一篇文章<Essential Performance Facts and .NET Framework Tips>,知名博主寒江独 ...
- winrar5.50去广告教程(仅供学习使用)
https://blog.csdn.net/EnigmCode/article/details/78328873 第一步:到WinRAR官网www.rarlab.com下载自己需要的版本,我这里选择C ...
- TOJ 1220 填数字游戏 / 深搜
填数字游戏 时间限制(普通/Java):1000MS/10000MS 运行内存限制:65536KByte 描述 有个小游戏,让你填写以下方框,要求: a1+a2+a3+M=b1+b2+b3+M ...
- SQL 连接操作 及 查询分析