两个Activity之间传递数据(传递对象、传递集合)

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 listdetail = new ArrayList();

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) 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 CREATOR = new Creator() {  
        @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 persons=new ArrayList<>();  
persons.add(person1);  
persons.add(person2);  
persons.add(person3);  
//传递对象集合  
intent.putParcelableArrayListExtra("persons",persons); 

3>:另一个页面接受数据

//接收对象集合  
List persons=getIntent().getParcelableArrayListExtra("persons");  
以上就是传递单个对象、使用bundle传递多个对象、使用Serializable和Parceable传递集合的使用方式了。

你可能感兴趣的:(两个Activity之间传递数据(传递对象、传递集合))