1.对要传递的对象类型实现Parcelable:publicclassUserimplementsParcelable//对象必须实现Parcelable接口才可以putExtra(或者序列化)
{
Stringname;
Stringpsw;
publicUser(Stringname,Stringpsw)
{
super();
this.name=name;
this.psw=psw;
}
@Override
publicStringtoString()
{
return"User[name="+name+",psw="+psw+"]";
}
@Override
publicintdescribeContents()
{
return0;
}
@Override
publicvoidwriteToParcel(Parceldest,intflags)//将属性写入Parcel对象
{
dest.writeString(name);
dest.writeString(psw);
}
publicstaticfinalParcelable.CreatorCREATOR=newParcelable.Creator()
{
publicUsercreateFromParcel(Parcelin)
{
returnnewUser(in);//创建一个有参构造函数
}
publicUser[]newArray(intsize)
{
returnnewUser[size];
}
};
publicUser(Parcelin)//根据写入的顺序依次读取
{
name=in.readString();
psw=in.readString();
}
}
2.第一个activity传递user对象:publicclassMainActivityextendsActivity
{
privateEditTexteditText1;
privateEditTexteditText2;
@Override
protectedvoidonCreate(BundlesavedInstanceState)
{
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(newOnClickListener()
{
@Override
publicvoidonClick(Viewv)
{
Stringnamestr=editText1.getText().toString();
Stringpswstr=editText2.getText().toString();
Useruser=newUser(namestr,pswstr);
Intentintent=newIntent(MainActivity.this,NextActivity.class);
intent.putExtra("user",user);//传入对象,对象类必须实现Parcelable或者序列化
startActivity(intent);
}
});
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu)
{
getMenuInflater().inflate(R.menu.activity_main,menu);
returntrue;
}
}
3.第二个activity接收user对象:publicclassNextActivityextendsActivity
{
@Override
protectedvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
TextViewtextView=(TextView)findViewById(R.id.textView1);
Intentintent=getIntent();
Useruser=intent.getParcelableExtra("user");//得到一个对象
textView.setText(user.toString());
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu)
{
getMenuInflater().inflate(R.menu.activity_next,menu);
returntrue;
}
}
其他笔记:
1.带有数组类型属性的类@Override
publicvoidwriteToParcel(Parceldest,intflags)
{
dest.writeStringList(CompanyIntroList);
}
publicEstateInfoJson(Parcelin)
{
CompanyIntroList=newArrayList();
in.readStringList(CompanyIntroList);
}
2.带有其他类的属性publicEstateParamJsonEstateParam;
@Override
publicvoidwriteToParcel(Parceldest,intflags)
{
dest.writeValue(EstateParam);
}
@Override
publicEstateInfoJson(Parcelin)
{
EstateParam=(EstateParamJson)in.readValue(EstateParamJson.class.getClassLoader());
}
3.带有其他类的数组类型的属性publicArrayListshiJing;//实景图
@Override
publicvoidwriteToParcel(Parceldest,intflags)
{
dest.writeTypedList(shiJing);
}
publicGalleryJson(Parcelin)
{
shiJing=newArrayList();
in.readTypedList(shiJing,PicJson.CREATOR);
}
4.带有子类父类的情况:publicabstractclassAimplementsParcelable{
privateinta;
protectedA(inta){
this.a=a;
}
publicvoidwriteToParcel(Parcelout,intflags){
out.writeInt(a);
}
protectedA(Parcelin){
a=in.readInt();
}
}
publicclassBextendsA{
privateintb;
publicB(inta,intb){
super(a);
this.b=b;
}
publicstaticfinalParcelable.CreatorCREATOR=newParcelable.Creator(){
publicBcreateFromParcel(Parcelin){
returnnewB(in);
}
publicB[]newArray(intsize){
returnnewB[size];
}
};
publicintdescribeContents(){
return0;
}
publicvoidwriteToParcel(Parcelout,intflags){
super.writeToParcel(out,flags);
out.writeInt(b);
}
privateB(Parcelin){
super(in);
b=in.readInt();
}
}
参考:/docportal/doc_queryMdocDetail.action?mdoc.docindex=6301