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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值