参数传递主要是从一个Activity传递到另一个Activity,这里分三部分记载
第一部分是最简单的只有一个数据的时候的数据传递
//传递数据
Intent t = new Intent(MainActivity.this, AnotherActivity.class);
t.putExtra("data", "hello another activity");
startActivity(t);
//接收数据 如果不是String的就用 getIntExtra、getDoubleExtra、、、
String dataStr= getIntent().getStringExtra("data");
第二部分是多个数据的时候的数据传递,这个时候使用Bundle装载数据
//传递数据
Intent t = new Intent(MainActivity.this, AnotherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "zhaungsan");
bundle.putString("sex", "man");
bundle.putInt("age", 11);
t.putExtras(bundle);
startActivity(t);
//接收数据
Bundle bundle=getIntent().getStringExtra("data");
String name= bundle.getString("name");
String sex= bundle.getString("sex");
Integer age= bundle.getInt("age");
第三部份是传递自定义类型的数据
自定义数据类型的传递有两种:一种是实现Serializable接口;另一种是实现Parcelabe接口
实现Serializable接口
public class User implements Serializable {
private String name;
private String sex;
private int age;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String _name, int _age) {
this.age = _age;
this.name = _name;
}
public User(String _name, int _age, String _sex) {
this.age = _age;
this.sex = _sex;
this.name = _name;
}
}
实现了Serializable接口后就可以直接用来传递数据了
//传递数据
Intent t = new Intent(MainActivity.this, AnotherActivity.class);
t.putExtra("user", new User("zhangsan", 24,"man"));
startActivity(t);
//接收数据
User intUser = (User) getIntent().getSerializableExtra("user");
实现Parcelabe接口
public class User implements Parcelable {
private String name;
private String sex;
private int age;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String _name, int _age) {
this.age = _age;
this.name = _name;
}
public User(String _name, int _age, String _sex) {
this.age = _age;
this.sex = _sex;
this.name = _name;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
Bundle bundle = new Bundle();
bundle.putString("name", getName());
bundle.putString("sex", getSex());
bundle.putInt("age", getAge());
dest.writeBundle(bundle);
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel source) {
Bundle bundle = source.readBundle();
return new User(bundle.getString("name", "zhangsan"), bundle.getInt("age", 0), bundle.getString("sex", "man"));
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
}
实现了Parcelabe接口后就可以直接用来传递数据了
//传递数据
Intent t = new Intent(MainActivity.this, AnotherActivity.class);
t.putExtra("user", new User("zhangsan", 24,"man"));
startActivity(t);
//接收数据
User intUser = (User) getIntent().getParcelableExtra("user");
实现自定义数据传递的两种方法差别很大,一种使用简单,但是速度却很慢就是Serializable,一种使用有点麻烦,但是速度却很快就是Parcelabe。