假设需要传递User对象,对象包含name和age属性。这个时候有两种方法,需要实现Serializable或者Parcelable。实现Serializable的时候系统为我们做了很多事情,自己不需要写很多代码,但是这样效率比较慢,而实现Parcelable需要自己写一写代码,但是效率更快。
1.使用Serializable。(从MainActivity跳转到TheAty,传递User对象)
User中:
实现Serializable接口
public class User implements Serializable {
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public User(String name,int age){
this.name = name;
this.age = age;
}
}
MainActivity中:
findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this,TheAty.class);
i.putExtra("user",new User("jikexueyuan",2));
startActivity(i);
}
});
TheAty中:
Intent i = getIntent();
User user = (User) i.getSerializableExtra("user");
tv.setText(String.format("name=%s,age=%d",user.getName(),user.getAge()));
以上是使用Serializable进行值对象传递。
如果使用Parcelable传递:
User中需要自己实现几个方法:
public class User implements Parcelable {
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public User(String name,int age){
this.name = name;
this.age = age;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(getName());
dest.writeInt(getAge());
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel source) {
return new User(source.readString(),source.readInt());
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
}
在TheAty中:
Intent i = getIntent();
User user = i.getParcelableExtra("user");
tv.setText(String.format("name=%s,age=%d",user.getName(),user.getAge()));
相比较而言就是在User类中多实现了几个方法,然后取值的时候使用的方法不同。
网友评论