Andorid开发过程中,两个Activity之间需要进行值对象传递,比如自定义对象类型User
需要实现序列化接口,两种解决方案
方案一:
实现java提供的 Serializable 接口,此时操作简单
ActivityA 中,只需要将User对象绑定到Intent中即可
Intent i = new Intent(MainActivity.this,BAty.class);
i.putExtra("user",new User("my android",2)); startActivity(i);
在ActivityB中,直接获取
User user = (User) i.getSerializableExtra("user");
String = String.format("User info(name=%s,age=%d)",user.getName(),user.getAge());
可以进行后续使用
方案二:
实现Andorid提供的 Parcelable 接口,
使用该接口需要实现两个方法
@Override public int describeContents() { return 0; }@Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(getName()); dest.writeInt(getAge());// 多个同数据类型属性时,使用Bundle进行传递 // dest.writeBundle(new Bundle()); }并且需要定义一个私有变量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]; } };ActivityB 中,获取User对象方法Intent i = getIntent();
User user = i.getParcelableExtra("user");
下面为完整的User对象
package com.example.administrator.activitylifecircle; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import java.io.Serializable; /** * Created by Administrator on 2015/11/4 0004. */ public class User implements Parcelable{ // 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 String getName() { return name; } public void setName(String name) { this.name = name; } public User(String name,int age){ this.name = name; this.age = age; } /** * 不用修改 * @return */ @Override public int describeContents() { return 0; } /** * 自己实现属性序列化 * @param dest * @param flags */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(getName()); dest.writeInt(getAge()); // dest.writeBundle(new Bundle()); } 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]; } }; }