下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android如何通过Intent在activity之间传递自定义对象
能解决这个问题真的太让人兴奋,这里要普及一个知识点,那就是所谓的序列化。序列化:将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。大家读不读得懂先暂且不说,因为概念什么的东西我也最烦了,大家只要知道用序列化能实现我们想做的事情就OK了(就是标题所说的功能)。在大多数实战项目中进行两个页面之间的切换时,不会只传一个int或者string那么轻松,就算是传稍微加点料的大众类型(比如int数组或List<string>之类的)其实也没什么大不了的,因为在Intent类中有多个putExtra的重载方法,足以满足我们的需求。但人们总是“贪婪”的,哈哈,有的时候这些简单的类型无法满足我们的需求,我们通过会要求传递一个自定义的类或者该类的集合,我们不知道这么说大家头脑中有没有概念。举个例子:我们要向另一个activity传递一个人(Person)的对象,Android中没有Person这个类,是我们自定义的。所以要想利用Intent去传递Person或者List<Person>这样的对象,我们就要使用到序列化了。这不是一个好消息吗?至少我们有解决的办法了。在给大家上代码示例之前,还要再多说点,在Android中使用序列化有两种方法:(1)实现Serializable接口(2)实现Parcelable接口其中Parcelable是Android特有的功能,效率要比实现Serializable接口高。实现Serializable接口非常简单,声明一下就可以了。而实现Parcelable虽然稍微复杂一些,但效率高,既然是Android特有用来做序列化使用的,那我们就推荐用这种方法。下面请看代码示例:首先需要写一个实现Parcelable接口的类,代码中的1,2,3条是实现Parcelable接口序列化对象必须要有的。//1、实现Parcelable接口
publicclassPersonimplementsParcelable{
privateStringname
privateintage;
publicPerson()
{}
publicPerson(Stringname,intage)
{
=name;
this.age=age;
}
publicStringgetName()
{
;
}
publicvoidsetName(Stringname)
{
=name;
}
publicintgetAge()
{
returnthis.age;
}
publicvoidsetAge(intage)
{
this.age=age;
}
@OverridepublicintdescribeContents(){
return0;
}
//2、实现Parcelable接口的publicvoidwriteToParcel(Parceldest,intflags)方法
//通常进行重写
@Override
publicvoidwriteToParcel(Parceldest,intflags){
//把数据写入Parcel
dest.writeString(name);
dest.writeInt(age);
}
//3、自定义类型中必须含有一个名称为CREATOR的静态成员,该成员对象要求实现Parcelable.Creator接口及其方法
publicstaticfinalParcelable.Creator<Person>CREATOR=newParcelable.Creator<Person>(){
@Override
publicPersoncreateFromParcel(Parcelsource){
//从Parcel中读取数据
//此处read顺序依据write顺序
returnnewPerson(source.readString(),source.readInt());
}
@Override
publicPerson[]newArray(intsize){
returnnewPerson[size];
}
};
}这样一个实现Parcelable接口序列化类就创建好了,那么我们如何用其来进行传递呢?在原activity中我们需要这样传递数据ArrayList<Person>lPersonSet=newArrayList<Person>();
Personp1=newPerson(“张三”,20);
lPersonSet.add(p1);
Personp2=newPerson(“李四”,22);
lPersonSet.add(p2);
Personp3=newPerson(“王五”,21);
lPersonSet.add(p3);
//进行页面跳转
Intentintent=newIntent();
intent.putParcelableArrayListExtra("com.example.utilities.personset",lPersonSet);
intent.setClass(MyActivity.this,OtherActivity.class);
MyActivity.this.startActivity(intent);而在OtherActivity中呢?我们需要这样接收数据ArrayList<Person>lPersonSet=newArrayList<Perso
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会计实务综合课程设计
- 过程流体机械课程设计
- 汽车设计课程设计感想
- 2024至2030年中国背带式自动包装机行业投资前景及策略咨询研究报告
- 2024至2030年中国活塞式压力真空计数据监测研究报告
- 2024至2030年中国铁扶手数据监测研究报告
- 课程设计光盘素材
- 2024至2030年中国微波杀菌机数据监测研究报告
- 2024年1.61超薄非球面树脂镜片项目可行性研究报告
- 软件综合课程设计评价
- GB/T 22844-2009配套床上用品
- GB/T 14683-2017硅酮和改性硅酮建筑密封胶
- 无人机校企合作协议
- 工程设备进场进场开箱验收单
- GB 16809-2008防火窗
- 《百团大战》历史课件
- 八年级上册道德及法治非选择题专项训练
- 2023年徐州市国盛控股集团有限公司招聘笔试题库及答案解析
- 机械课程设计~二级减速器设计教程
- 国家开放大学《传感器与测试技术》实验参考答案
- 工程造价司法鉴定实施方案
评论
0/150
提交评论