activity间传递参数
传递值对象
值对象可以理解为自定义的数据类型对象。
为了完成这个知识点的讲解,先来创建一个User类型的类,它有name和age两个属性,然后请添加getter/setter方法,构造方法等基本方法。
public class User {
private String name;
private int age;
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
现在在第一个activity即FirstActivity中,在进行activity跳转代码的地方修改成如下代码
Intent i=new Intent(FirstActivity.this,TwoActivity.class);
i.putExtra("data",new User("miao",20));//这里会有红线,有错误。
startActivity(i);
此时代码会显示有错误,点击错误的提示信息,会看到如下的解决方案

现在我们先选择第二种方式来解决它。
先让User类实现Serializable接口。在类的后面写上implements Serializable,其它的都不需要改变。
public class User implements Serializable{
......
}
此时之前的错误已经没有了。现在在接收数据的activity界面代码即TwoActivity中添加如下代码
//获取传入的Intent
Intent i=getIntent();
User user=(User) i.getSerializableExtra("data");
现在从FirstActivity传过来的数据已经传到了TwoActivity中的user对象上了,你可以调用user对象的相关方法来获取其属性的值了,去试试吧!让数据显示在你想要显示的地方。
这种方法用起来是不是很简单,简单的同时当然这是要付出的点代价的,速度有点慢。
下面我们来换种方式来解决问题吧!
User类实现Parcelable接口,这里需要实现两个方法,再自己添加一个属性。
public class User implements Parcelable{
......
@Override
public int describeContents() {
return 0;
}
//序列化数据,系统自动执行
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(getName());
dest.writeInt(getAge());
}
public static final Creator<User> CREATOR=new Creator<User>() {
//通过一个Parcel对象创建对象
@Override
public User createFromParcel(Parcel source) {
return new User(source.readString(),source.readInt());
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
}
以上是传递一个String类型的数据,那如果要传递多个String类型的数据那该怎么办呢?可以将数据打包到Bundle对象上,此时可以用如下的方法展开,这里就不多言了,感兴趣的可自己试试!
Parcel.writeBundle(Bundle val)
Parcel.readBundle()
以上改完之后,在接收数据的代码改动一下
Intent i=getIntent();
User user=i.getParcelableExtra("data");
好了,此时user已经成功接收FirstActivity发送过来的名字为data的User对象了。大家可以调用相关的方法来获取传过来的信息了。
两种方法已经介绍完毕,现在来具体讲讲两种方式的优缺点。
- 通过实现Serializable接口实现值传递,操作简单,序列化操作是由系统完成的,速度较慢。
- 通过实现Parcelable接口实现值传递,操作复杂,因为要自己手动编写代码实现,速度较快。
以上的知识是自己看相关教程后将所得到的认知,转换为了文字供大家一起学习参考。
activity间传递参数的更多相关文章
- 第一课android开发之在activity间传递参数
一.活动间简单参数传递:1.在布局中添加按钮,用<Button,用id设置id名称,id="@+id/这儿填写你要设置成的名称":用text设置按钮上显示的文字.text=& ...
- 使用Bundle在Activity间传递数据
使用Bundle在Activity间传递数据 源Activity public class SourceActivty extends Activity { private Intent intent ...
- jsp页面间传递参数 中文乱码问题(zz)
jsp页面间传递参数 中文乱码问题 1.传递参数 var url = "*****Test.jsp?param1="+encodeURI(encodeURI(str));//对 ...
- ios页面间传递参数四种方式
ios页面间传递参数四种方式 1.使用SharedApplication,定义一个变量来传递. 2.使用文件,或者NSUserdefault来传递 3.通过一个单例的class来传递 4.通过Dele ...
- JSP页面间传递参数的5种方法
JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...
- JavaScript学习总结(三、函数声明和表达式、this、闭包和引用、arguments对象、函数间传递参数)
一.函数声明和表达式 函数声明: function test() {}; test(); //运行正常 function test() {}; 函数表达式: var test = functio ...
- WPF 进程间传递参数
WPF 进程间传递参数 在软件开发中有时需要在一个软件中启动另一个软件,这时用Process.Start(“软件路径”)可以启动另一个软件.如果在这个过程中还需要传递一些参数给新启动 ...
- jsp 页面间传递参数
JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...
- Activity之间传递参数(四)
--------siwuxie095 获取Activity的返回参数 1.首先修改两个布局文件,都修改为 LinearLayout 布局, 添加orientation属性为:vertical. (1) ...
随机推荐
- [luoguP3146] [USACO16OPEN]248(区间DP)
传送门 f[i][j]表示区间 i-j 合并的最大值 转移: 若f[i][k] && f[k+1][j] && f[i][k] == f[k+1][j] --> ...
- [luoguP2434] [SDOI2005]区间(贪心)
传送门 简单贪心 ——代码 #include <cstdio> #include <iostream> #include <algorithm> int n, l, ...
- noip模拟赛 罪犯分组
分析:看了题后没别的思路,感觉就是dp,普通dp的话状态和方程实在是不好设计,观察数据,发现N非常小,暗示了这道题要用状压dp来做. 先枚举每个集合,再用O(n^2)的暴力看这个集合内有多少个冲突,如 ...
- 夜话JAVA设计模式之适配器模式(adapter pattern)
适配器模式:将一个类的接口,转换成客户期望的另一个接口,让不兼容的接口变成兼容. 1.类适配器模式:通过多重继承来实现适配器功能.多重继承就是先继承要转换的实现类,再实现被转换的接口. 2.对象适配器 ...
- 用信号量及其PV操作处理实际问题
43.现有3个生产者P1.P2.P3,他们都要生产橘子汁,每个生产者都已分别购得两种不同的原料,待购齐第三种原料后就可配制成橘子汁装瓶出售.有一供应商能源源不断的供应糖.水.橘子精,但每次只拿出一种原 ...
- MySQL大小写问题的简单说明(关键字/函数/表名)(转)
MySQL语句中字母大小写规则随着语句元素的不同而变化,同时还要取决于MySQL服务器主机上的操作系统. SQL关键字与函数名 关键字和函数名不区分字母的大小写.如.abs.bin.now.versi ...
- PHP中错误与异常的日志记录用法分析
原文:http://www.jb51.net/article/89548.htm ----------------------------------------------------------- ...
- 推断client手机类型,并跳转到对应的app下载页面
实现的原理,是检測浏览器的 USER-AGENT 这个header,然后依据正則表達式来确定client类型. 假设都不匹配,Fallback回退策略是显示相应的页面.让用户自己选择. 适合採用二维码 ...
- Wireshark网络分析实战笔记(一)抓包过滤器
抓包过滤器和显示过滤器的差别: 1.抓包过滤器配置在抓包之前,wireshark仅仅抓取抓包过滤器过滤的数据 2.显示过滤器配置在抓包后,wireshark已经抓取全部的数据包,显示过滤器让wires ...
- NYOJ_58最少步数(queue+BFS)
描写叙述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 ...