在android 的Activity 中,两个Activity 中对象的传递。
通常我们使用意图来启动另一个Activity.如》 Intent intent = new Intent(MainActivity.this,OtherActivity.class);
如果在两个Activity中传递数据就需要用到一个对象 Bundle bun = new Bundle();
我们可以把Bundle 理解成一个容器,类似于map这样的东西。把"普通"对象放到里边,然后就可以在另一个Activity中获取该对象.
比方说:
bun.putString("name","华仔");
bun.putInt("age", 18);
而在另一个Activity 中就可以用。
Intent intent = this.getIntent();
String name = intent.getStringExtra("name");
就可以获取到值。这里所说的普通对象。
那么自定义对象在android中应该怎么实现呢。
我记得在java语言中。如果对象网络上传输就得实现序列化。自定义类需要实现 java.io.Serializable.
而在android 的应用中这样的方法同样可行代码如下。
package com.hkrt.domain;
/**person 实体*/
public class Person implements java.io.Serializable {
private static final long serialVersionUID = -1115440875848739771L;
private int id;
private String name;
private double money;
public Person(String name, double money) {
super();
this.name = name;
this.money = money;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
@Override
public String toString() {
return "Person [id=" + id + ", money=" + money + ", name=" + name + "]";
}
}
在android 中代码就可以用
Person per = new Person("张三",5896.20);
bun.putSerializable("person", per);
进行数据传递。
在另一个Activity 中就可以这样获取了。
Bundle bun = intent.getExtras();
Person per = (Person)bun.getSerializable("person");
第二种方法。就是自定义数据对象实现 android.os.Parcelable。译为:包裹
同样可以理解成容器。代码如下:
package com.hkrt.domain;
import android.os.Parcel;
import android.os.Parcelable;
public class Student implements android.os.Parcelable {
private String name;
private int age;
private double score;
public Student() {
super();
}
public Student(Parcel parcel) {
name = parcel.readString();
age = parcel.readInt();
score = parcel.readDouble();
}
public Student(String name, int age, double score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
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 double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(name);
parcel.writeInt(age);
parcel.writeDouble(score);
}
public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
官方解释如下:
nterface for classes whose instances can be written to and restored from a Parcel. Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator interface.
在android 的代码就可以这样写了。
Student stu = new Student("李四", 20, 100.00);
bun.putParcelable("stu", stu);
而在另一个Activity中就可以获取到这个自定义对象Student.
Student stu = (Student)bun.getParcelable("stu");
结果图: