直接开正题,Intent传递值就是平常那些很简单的,接下来介绍传递 对象,和 对象数组
1 .intent 传递自定义的 对象 -
实体类继承 Serializable
publicclassAAimplementsSerializable{
publicString a;
publicString aa;
publicString aaa;
}
intent塞入数据端
AA a =newAA();
a.a="a";
a.aa ="aa";
a.aaa = "aaa";
Intent in = newIntent().setClass(MainActivity.this, MainActivity1.class);
Bundle bu = newBundle();
bu.putSerializable("enty", a);
in.putExtras(bu);
startActivity(in);
intent 接收数据端
AA a =(AA)this.getIntent().getExtras().getSerializable("enty");
System.out.println("a.a ="+ app.a);
System.out.println("a.aa ="+ app.aa);
System.out.println("a.aaa ="+ app.aaa);
实体类类继承 Parcelable(简单介绍一下:
1.什么是Parcelable ?
Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口。一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为“可打包的”了。
2.Parcelable 传递对象
Android序列化对象主要有两种方法:
1.1实现Serializable接口是JavaSE本身就支持的;
1.2实现Parcelable接口,Parcelable是Android特有的功能,效率比实现Serializable接口高,像用于Intent数据传递也都支持,而且还可以用在进程间通信(IPC),
除了基本类型外,只有实现了Parcelable接口的类才能被放入Parcel中。
)
Parcelable的接口的定义:
publicinterfaceParcelable {
//内容描述接口
publicintdescribeContents();
//写入接口函数,打包
publicvoidwriteToParcel(Parcel dest,intflags);
//1.读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入。
//2.为了能够实现模板参数的传入,这里才定义CREATOR嵌入接口,有两个接口函数分别返回单个和多个继承类实例。
publicinterfaceCreator {
publicT createFromParcel(Parcel source);
publicT[] newArray(intsize);
}
publicclassAAimplementsParcelable{
publicString a;
publicString aa;
publicString aaa;
@Override
publicintdescribeContents() {
return0;
}
@Override
publicvoidwriteToParcel(Parcel parcel,intflags) {
//序列化对象,必须按照声明顺序
parcel.writeString(a);
parcel.writeString(aa);
parcel.writeString(aaa);
}
//必须实现这个接口,它的作用是从 percel中读出来数据,顺序必须按照声明顺序
publicstaticfinalParcelable.Creator CREATOR =newCreator(){
@Override
publicAA createFromParcel(Parcel source) {
AA app= newAA();
app.a = source.readString();
app.aa = source.readString();
app.aaa = source.readString();
returnapp;
}
@Override
publicAA[] newArray(intsize) {
returnnewAA[size];
}
};
}
intent塞入数据端
AA a =newAA();
a.a="a";
a.aa ="aa";
a.aaa = "aaa";
Intent in = newIntent().setClass(MainActivity.this, MainActivity1.class);
Bundle bu = newBundle();
bu.putParcelable("enty", a);
in.putExtras(bu);
startActivity(in);
接收数据端
// 可以这样app =(AA)this.getIntent().getParcelableExtra("enty");
//也可以这样写,上面的也是
app =(AA)this.getIntent().getExtras().getParcelable("enty");
System.out.println("a.a ="+ app.a);
System.out.println("a.aa ="+ app.aa);
System.out.println("a.aaa ="+ app.aaa);
2。 下来是 自定义对象 数组传递
实体类类继承 Parcelable
intent塞入数据端
List list_aa =newArrayList();
AA a = newAA();
a.a="a";
a.aa ="aa";
a.aaa = "aaa";
AA a1 = newAA();
a1.a="a1";
a1.aa ="aa1";
a1.aaa = "aaa1";
list_aa.add(a);
list_aa.add(a1);
Intent in = newIntent().setClass(MainActivity.this, MainActivity1.class);
Bundle bu = newBundle();
bu.putParcelableArrayList("list", (ArrayList<?extendsParcelable>) list_aa);//---
in.putExtras(bu);
startActivity(in);
接收list数据端
List aa =this.getIntent().getExtras().getParcelableArrayList("list");
for(AA aa2 : aa) {
System.out.println("list_a.a = "+ aa2.a);
System.out.println("list_a.aa = "+ aa2.aa);
System.out.println("list_a.aaa = "+ aa2.aaa);
System.out.println("=================================");
}