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

Android:通过Intent传递对象 Parcelable

时间:2023-11-24 05:46:51

相关推荐

Android:通过Intent传递对象 Parcelable

1.对要传递的对象类型实现Parcelable:

publicclassUserimplementsParcelable//对象必须实现Parcelable接口才可以putExtra(或者序列化){Stringname;Stringpsw;publicUser(Stringname,Stringpsw){super();this.name=name;this.psw=psw;}@OverridepublicStringtoString(){return"User[name="+name+",psw="+psw+"]";}@OverridepublicintdescribeContents(){return0;}@OverridepublicvoidwriteToParcel(Parceldest,intflags)//将属性写入Parcel对象{dest.writeString(name);dest.writeString(psw);}publicstaticfinalParcelable.Creator<User>CREATOR=newParcelable.Creator<User>(){publicUsercreateFromParcel(Parcelin){returnnewUser(in);//创建一个有参构造函数}publicUser[]newArray(intsize){returnnewUser[size];}};publicUser(Parcelin)//根据写入的顺序依次读取{name=in.readString();psw=in.readString();}}

2.第一个activity传递user对象:

publicclassMainActivityextendsActivity{privateEditTexteditText1;privateEditTexteditText2;@OverrideprotectedvoidonCreate(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(){@OverridepublicvoidonClick(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);}});}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){getMenuInflater().inflate(R.menu.activity_main,menu);returntrue;}}

3.第二个activity接收user对象:

publicclassNextActivityextendsActivity{@OverrideprotectedvoidonCreate(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());}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){getMenuInflater().inflate(R.menu.activity_next,menu);returntrue;}}

其他笔记:

1.带有数组类型属性的类

@OverridepublicvoidwriteToParcel(Parceldest,intflags){dest.writeStringList(CompanyIntroList);}publicEstateInfoJson(Parcelin){CompanyIntroList=newArrayList<String>();in.readStringList(CompanyIntroList);}

2.带有其他类的属性

publicEstateParamJsonEstateParam;@OverridepublicvoidwriteToParcel(Parceldest,intflags){dest.writeValue(EstateParam);}@OverridepublicEstateInfoJson(Parcelin){EstateParam=(EstateParamJson)in.readValue(EstateParamJson.class.getClassLoader());}

3.带有其他类的数组类型的属性

publicArrayList<PicJson>shiJing;//实景图@OverridepublicvoidwriteToParcel(Parceldest,intflags){dest.writeTypedList(shiJing);}publicGalleryJson(Parcelin){shiJing=newArrayList<PicJson>();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.Creator<B>CREATOR=newParcelable.Creator<B>(){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

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