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) ...
随机推荐
- codevs——1430 素数判定
1430 素数判定 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 质数又称素数.指在一个大于1的自然数中, ...
- codevs——1675 大质数 2
1675 大质数 2 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 小明因为没做作业而被数学老师罚站,之 ...
- css3 transform对其他样式影响,(尤其是position:flixed)
1.transform 会为当前元素添加 position : relative 特性: 当 magin 为负值的时候,就会覆盖到前面的 元素, 然而如果给前面元素添加了transform 属性后,前 ...
- Mentor.Graphics.FloTHERM.XT.2.3+Mentor.Graphics.Flowmaster.7.9.4
Mentor.Graphics.FloTHERM.XT.2.3 Mentor.Graphics.Flowmaster.7.9.4 AVL.CRUISE.V2015.0-车辆动力学仿真分析平台 AVL. ...
- ubuntu 搭建 svn服务器,使用http方式访问
原文: http://blog.csdn.net/wobuxingfang/article/details/70835414 参考:http://www.cnblogs.com/zzugyl/p/36 ...
- 模板小程序】求小于等于N范围内的质数
xiaoxi666 联系邮箱: xiaoxi666swap@163.com 博客园 首页 新随笔 联系 订阅 管理 [模板小程序]求小于等于N范围内的质数 1 //筛法求N以内的素数(普通法+优化 ...
- python 验证码 高阶验证
python 验证码 高阶验证 标签: 验证码python 2016-08-19 15:07 1267人阅读 评论(1) 收藏 举报 分类: 其他(33) 目录(?)[+] 字符型图片验证 ...
- UVa 10954 Add All(优先队列)
题意 求把全部数加起来的最小代价 a+b的代价为(a+b) 越先运算的数 要被加的次数越多 所以每次相加的两个数都应该是剩下序列中最小的数 然后结果要放到序列中 也就是优先队列了 #inc ...
- LeetCode 443. String Compression (压缩字符串)
题目标签:String 这一题需要3个pointers: anchor:标记下一个需要存入的char read:找到下一个不同的char write:标记需要存入的位置 让 read指针 去找到下一个 ...
- Codeforces Round #272 (Div. 2) Dreamoon and WiFi 暴力
B. Dreamoon and WiFi Dreamoon is standing at the position 0 on a number line. Drazil is sending a li ...