700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android parcelable intent Android:通过Intent传递对象 Parcelable

android parcelable intent Android:通过Intent传递对象 Parcelable

时间:2024-04-30 05:22:05

相关推荐

android parcelable intent Android:通过Intent传递对象 Parcelable

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。