1. 概述
在我们开发项目的过程中,一定会有两个 Activity之间需要进行数据传递的,这个想都不用想,是一定会有的。如果数据比较少,我们可以单个传递字段,如果数据比较多我们可以直接传递一个对象,当然也可以直接传递集合,这些都是可以的,那么接下来我们就来看下它们到底是如何进行传递的。
2. 具体实现
2.1 传递单个对象
MainActivity的代码:
//ThinkActivity.class 是你需要将数据传递的目标页面
Intent intent=new Intent(this,ThinkActivity.class);
//传递基本数据类型
intent.putExtra("uname","张三");
intent.putExtra("uage",18);
ThinkActivity.java(接收数据页面) 代码:
//接收MainActivity传递过来的数据
String uname=getIntent().getStringExtra("uname");
//参数0是当uage为null时uage的默认值为0
int uage=getIntent().getIntExtra("uage",0);
如果传递的字段比较少,那么可以直接使用上面方式进行单个去传递,如果数据量比较大的话,那么可以使用 bundle进行传递,bundle是一个集装箱,将我们需要传递的所有字段放到这个bundle集装箱中,然后直接把 bundle集装箱扔给 intent即可。
2.2 使用bundle集装箱传递多个字段,用法就是:bundle相当于一个集装箱,然后把所有字段放到集装箱中,然后再把集装箱扔给intent即可
MainActivity代码如下:
//传递Bundle(集装箱),将我们需要传递的数据全部放入集装箱,然后直接将集装箱传递到目标页面
Bundle bundle=new Bundle();
bundle.putString("uname","张三");
bundle.putInt("uage",18);
intent.putExtra("bundle",bundle);
ThinkActivity.java(接收数据页面) 代码:
//接收bundle
Bundle bundle=getIntent().getBundleExtra("bundle");
String uname=bundle.getString("uname");
int uage=bundle.getInt("uage");
如果对使用Serializable和Parceable传递对象不是很了解的,可以看下我之前写的文章:
android如何使用Bundle传递对象(Serializable 和 Parceable 传递对象)
下边我就来说下传递list集合的方式
2.3 使用Serializable传递集合
1>:首先要对javabean进行序列化处理,即实现Serializable。
public class YunDanBean implements Serializable{
private String yunhao;// 承运号
private String huohao;// 货号
private String hwpm;// 品名
public String getYunhao() {
return yunhao;
}
public void setYunhao(String yunhao) {
this.yunhao = yunhao;
}
public String getHuohao() {
return huohao;
}
public void setHuohao(String huohao) {
this.huohao = huohao;
}
public String getHwpm() {
return hwpm;
}
public void setHwpm(String hwpm) {
this.hwpm = hwpm;
}
}
2>:页面跳转,发送list数据
List<YunDanBean> listdetail = new ArrayList<YunDanBean>();
Intent intent = new Intent(WayBillActivity.this, WayBillMessage.class);
intent.putExtra("listdetail", (Serializable) listdetail);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
3>:另一个页面接受数据
yundanList = (List<YunDanBean>) getIntent().getSerializableExtra("listdetail");
2.4 使用Parceable传递集合
1>:新建一个实体类Person.java,然后实现Parcelable接口,并且重写其中的方法
/**
* Created by Administrator on 2017/6/16 0016.
*/
public class Person implements Parcelable{
private int pid;
private String pname;
private int page;
public Person(){
}
//将对象属性反序列化然后读取出来,注意属性的顺序必须按照序列化属性的顺序
protected Person(Parcel in) {
pid = in.readInt();
pname = in.readString();
page = in.readInt();
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
//将对象属性进行序列化
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(pid);
dest.writeString(pname);
dest.writeInt(page);
}
public Person(int pid, String pname, int page) {
this.pid = pid;
this.pname = pname;
this.page = page;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
@Override
public String toString() {
return "Person{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", page=" + page +
'}';
}
}
2>:页面跳转,发送list数据
Person person1=new Person(1,"静静",19);
Person person2=new Person(2,"明明",19);
Person person3=new Person(3,"雷雷",19);
ArrayList<Person> persons=new ArrayList<>();
persons.add(person1);
persons.add(person2);
persons.add(person3);
//传递对象集合
intent.putParcelableArrayListExtra("persons",persons);
3>:另一个页面接受数据
//接收对象集合
List<Person> persons=getIntent().getParcelableArrayListExtra("persons");