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 CREATOR = new Parcelable.Creator()
{
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();
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 shiJing;//实景图
@Override
public void writeToParcel(Parcel dest, int flags)
{
dest.writeTypedList(shiJing);
}
public GalleryJson(Parcel in)
{
shiJing = new ArrayList();
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 CREATOR = new Parcelable.Creator() {
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