Intent的用法大家比较熟悉了,可以借助它来启动活动,发送广播,启动服务等。在进行上述操作的时候,还可以在Intent中添加一些附加数据, 以达到传值的效果,比如在FirstActivity中添加如下代码
Intent intent=new Intent(HLActivity.this,SecondActivity.class);
intent.putExtra("string_data","hello");
intent.putExtra("int_data",100);
startActivity(intent);
这里调用了Intent的putExtra()方法来添加要传递的数据,之后在SecondActivity中就可以得到这些值了,代码如下:
getIntent().getStringExtra("string_data");
getIntent().getIntExtra("int_data",0);
但是putExtra()方法中所支持的数据类型是有限的,虽然常用的一些数据类型它都支持,但是当你想去传递一些自定义对象的时候不方便。
使用Intent传递对象通常有两种实现方式,Serializable和Parcelable
Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。序列化方法很简单,只需让一个类去实现Serializable这个接口就可以了。比如一个Person类,其中包含了name和age这两个字段,想要将其序列化就可以这样写。
public class Person implements Serializable
{
private String name;
private int age;
setters getters; //set和get方法
}
FirstActivity:
Person person=new Person();
person.setName("Tom");
person.setAge(20);
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("person_data",person);
startActivity(intent);
SecondActivity:
Person person=(Person)getIntent().getSerializableExtra("person_data");