在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");
结果图: