美文网首页
Activity之间传递值对象

Activity之间传递值对象

作者: csp | 来源:发表于2017-03-02 15:02 被阅读12次

假设需要传递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类中多实现了几个方法,然后取值的时候使用的方法不同。

相关文章

网友评论

      本文标题:Activity之间传递值对象

      本文链接:https://www.haomeiwen.com/subject/ayzhgttx.html