付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026六年级道德与法治下册 健康成长之路
- 小数除法单元测试-2024-2025学年人教版数学五年级上册(含答案)
- 向量优化技术就业前景分析
- 如何判断医患关系好坏
- 2024年公司办公写字楼租赁合同5篇
- 2024年保安员工转正申请书
- 2024年“中学学校体育计划”体育工作计划范本(四篇)
- 2023年乡镇开展预防学生溺水专专项行动实施方案
- 2023年教师资格之中学综合素质押题练习试卷A卷附答案
- 2023年江苏省镇江市丹阳市中考化学二模试卷
- (一模)惠州市2026届高三4月模拟考试英语试卷(含答案详解)
- 2026云南省投资控股集团有限公司招聘168人备考题库含答案详解(完整版)
- 临床护理实践指南2024版
- 以创新实现金融普惠-PPT课件
- 《教育研究方法——观察法》PPT课件
- 泛读4Unit5 toy story.ppt
- 单倍体育种多倍体育种(课堂PPT)
- 年成都远洋太古里案例解析(p)PPT课件
- 铜线连续退火装置的设计与实践
- 吨空气擦洗滤池系统技术标
- 脱硫、脱硝运行规程
评论
0/150
提交评论