多语言展示
当前在线:627今日阅读:152今日分享:13

安卓应用开发实战:[7]Activity传递对象

《安卓应用开发实战:[6]Activity传值》讨论了基本数据类型在Activity之间的传递,实际上Activity之间还可以传递对象(自定义数据类型)。在Activity之间传递的对象必须实现Serializable接口(下面第1到3步骤讲解)或者实现Parcelable接口。Serializable接口是JAVA语言就有的序列化接口,而Parcelable接口(下面第4到6步骤讲解)是安卓特有的序列化接口,有更高的安全性。
工具/原料

eclipse

方法/步骤
1

Serializable方法要传送的自定义类型:为了配合实验新建了如图所示的类,要传输的对象关键是实现了Serializable接口,也就是传送的对象要求是可序列化的。

2

Serializable方法发送端:和存放基本类型数据到Bundle的方法不一样,使用的是bundle.putSerializable()方法。发送端主要代码为: Intent intent = new Intent(); intent.setClass(MainActivity.this, MsgActivity.class); Bundle bundle = new Bundle(); Contact contact = new Contact();//要发送的对象 contact.setTelNum(editTextTelNum.getText().toString()); bundle.putSerializable('telNum', contact); intent.putExtra('bundle',bundle); startActivity(intent);

3

Serializable方法接收端:和接收普通数据类型的区别在于用getSerializable()方法得到对象。接收端主要代码为: TextView editTextTelNumMsg = (TextView) this .findViewById(R.id.editTextTelNumMsg); Intent intent = getIntent(); Bundle bundle = intent.getBundleExtra('bundle'); Contact contact = (Contact) bundle.getSerializable('telNum');//得到对象 editTextTelNumMsg.setText(contact.getTelNum());

4

Parcelable方法要传送的自定义类型:要传输的对象关键是实现了Parcelable接口,和实现Serializable相比比较复杂,要重写Parcelable接口的几个方法。实例代码如下:public class Contact implements Parcelable { private String telNum; // 联系人电话 public String getTelNum() { return telNum; } public void setTelNum(String telNum) { this.telNum = telNum; } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(telNum); } public static final Parcelable.Creator CREATOR = new Creator() { @Override public Contact createFromParcel(Parcel source) { Contact contact = new Contact(); contact.telNum = source.readString(); return contact; } @Override public Contact[] newArray(int size) { return new Contact[size]; } };}

6

Parcelable方法接收端:和Serializable方法类似,调用getParcelable()得到对象。

推荐信息