在Activity之间传递数据—传递值对象
传递有两种方式,一种是类继承自Serializable(Java方式,速度较慢),另一种是类继承自Parcelable(Android方式)
继承自Serializable的时候,实现比较简单,类只需书写必须的属性和构造函数。继承自Parcelable的时候,需要实现往目标中写数据等。
两种差别在实体类的书写和接收时。
1. 类继承自Serializable
MainActivity中的OnCreate方法添加代码:
findViewById(R.id.btnStart).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent i=new Intent(MainActivity.this,OthereActivity.class); User user=new User("杨戬",90); i.putExtra("user", user); startActivity(i); } });
OtherActivity中的Oncreate方法添加代码:
Intent i=getIntent(); tv=(TextView)findViewById(R.id.txtView); User u= (User) i.getSerializableExtra("user"); // User u= (User) i.getParcelableExtra("user"); 接收时的区别 tv.setText(String.format("姓名1:%s;年龄1:%d",u.getName(),u.getAge()));
2. 类继承自Parcelable
User类完整代码:
package com.example.jike.hhh; import android.os.Parcel; import android.os.Parcelable; import java.io.Serializable; /** * Created by Administrator on 15-6-14. */ //public class User implements Serializable { public class User implements Parcelable { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public User(String name, int age) { this.name=name; this.age=age; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { //向目标中写数据 parcel.writeString(getName()); parcel.writeInt(getAge()); } public static final Creator<User> CREATOR=new Creator<User>() { @Override public User createFromParcel(Parcel parcel) { return new User(parcel.readString(),parcel.readInt()); } @Override public User[] newArray(int i) { return new User[i];//返回i } }; }
人生无处不代码,没有代码不人生。