1.对要传递的对象类型实现Parcelable:
public class User implements Parcelable//对象必须实现Parcelable接口才可以putExtra(或者序列化)
String name;
String psw;
public User(String name, String psw)
super();
this.name = name;
this.psw = psw;
@Override
public String toString()
return "User [name=" + name + ", psw=" + psw + "]";
@Override
public int describeContents()
return 0;
@Override
public void writeToParcel(Parcel dest, int flags)//将属性写入Parcel对象
dest.writeString(name);
dest.writeString(psw);
public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>()
public User createFromParcel(Parcel in)
return new User(in);//创建一个有参构造函数
public User[] newArray(int size)
return new User[size];
public User(Parcel in)//根据写入的顺序依次读取
name = in.readString();
psw = in.readString();
}
2.第一个activity传递user对象:
public class MainActivity extends Activity
private EditText editText1;
private EditText editText2;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1 = (EditText) findViewById(R.id.editText1);
editText2 = (EditText) findViewById(R.id.editText2);
findViewById(R.id.button1).setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
String namestr = editText1.getText().toString();
String pswstr = editText2.getText().toString();
User user = new User(namestr, pswstr);
Intent intent = new Intent(MainActivity.this, NextActivity.class);
intent.putExtra("user", user);//传入对象,对象类必须实现Parcelable或者序列化
startActivity(intent);
@Override
public boolean onCreateOptionsMenu(Menu menu)
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
3.第二个activity接收user对象:
public class NextActivity extends Activity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
TextView textView = (TextView) findViewById(R.id.textView1);
Intent intent = getIntent();
User user = intent.getParcelableExtra("user");//得到一个对象
textView.setText(user.toString());
@Override
public boolean onCreateOptionsMenu(Menu menu)
getMenuInflater().inflate(R.menu.activity_next, menu);
return true;
}
其他笔记:
1.带有数组类型属性的类
@Override
public void writeToParcel(Parcel dest, int flags)
dest.writeStringList(CompanyIntroList);
public EstateInfoJson(Parcel in)
CompanyIntroList = new ArrayList<String>();
in.readStringList(CompanyIntroList);
}
2.带有其他类的属性
public EstateParamJson EstateParam;
@Override
public void writeToParcel(Parcel dest, int flags)
dest.writeValue(EstateParam);
@Override
public EstateInfoJson(Parcel in)
EstateParam = (EstateParamJson) in.readValue(EstateParamJson.class.getClassLoader());
}
3.带有其他类的数组类型的属性
public ArrayList<PicJson> shiJing;//实景图
@Override
public void writeToParcel(Parcel dest, int flags)
dest.writeTypedList(shiJing);
public GalleryJson(Parcel in)
shiJing = new ArrayList<PicJson>();
in.readTypedList(shiJing, PicJson.CREATOR);
}
4.带有子类父类的情况:
public abstract class A implements Parcelable {
private int a;
protected A(int a) {
this.a = a;
public void writeToParcel(Parcel out, int flags) {
out.writeInt(a);
protected A(Parcel in) {
a = in.readInt();
public class B extends A {
private int b;
public B(int a, int b) {
super(a);
this.b = b;
public static final Parcelable.Creator<B> CREATOR = new Parcelable.Creator<B>() {
public B createFromParcel(Parcel in) {
return new B(in);
public B[] newArray(int size) {
return new B[size];
public int describeContents() {
return 0;
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeInt(b);
private B(Parcel in) {
super(in);
b = in.readInt();
}
参考:http://dev.wo.com.cn/docportal/doc_queryMdocDetail.action?mdoc.docindex=6301