您的位置:首页 > 移动开发 > Android开发

Android Activity之间实现数据(对象,对象集合)传递

2017-06-16 20:36 351 查看
Android Activity之间实现数据传递是一项非常重要的技术,今天我就来讲一讲如何实现数据传递:

1.基本数据传递

MainActivity.java

Intent intent=new Intent(this,ThinkActivity.class);//ThinkActivity.class参数是你需要将数据传递的目标页面
//传递基本数据类型
intent.putExtra("uname","张三");
intent.putExtra("uage",18);


ThinkActivity.java(接收数据页面)

String uname=getIntent().getStringExtra("uname");//接收MainActivity传递过来的数据
int uage=getIntent().getIntExtra("uage",0);//参数0是当uage为null时uage的默认值为0


当然,这适用于数据不多的情况,如果一个页面数据量较大,用上面的方式就有点麻烦了,下面我们将一个新的方式

MainActivity.java
//传递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");


2.传递对象

我们先新建一个实体类Person.java,因为Android在进行对象传递的时候需要序列化,所以实体类需要先实现Parcelable接口,并且重写其中的方法

Person.java

package com.zhangkai.entity;

import android.os.Parcel;
import android.os.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 +
'}';
}
}


MainActivity.java

//传递对象
Person person1=new Person(1,"李四",19);
intent.putExtra("persons",person1);


ThinkActivity.java

//接收对象
Person person=getIntent().getParcelableExtra("persons");
tv_think_showName.setText(person.toString());


3.传递对象集合

MainActivity.java
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);


ThinkActivity.java

//接收对象集合
List<Person> persons=getIntent().getParcelableArrayListExtra("persons");
for (Person person : persons) {
tv_think_showName.setText(tv_think_showName.getText()+" "+persons.toString());//将对象集合设置到文本域
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐