Parcelable的基本使用
来源:互联网 发布:数控编程基本知识 编辑:程序博客网 时间:2024/06/14 23:57
Parcelable是一个接口,实现该接口的对象可以高效的在程序中被传递。实际上传递的对象是Parcel。根据文档的描述,Parcel是被设计成为了高性能的IPC通信,而不是为了持久化的存储。
实现起来以前觉得还蛮复杂的,今天一看觉得好像又很简单。
首先我们随便写一个Book类,表示数据项。
public class Book { private String name; private int isbn; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIsbn() { return isbn; } public void setIsbn(int isbn) { this.isbn = isbn; }}
然后让其实现接口Parcelable。
实现这个接口,必须要实现两个方法:describeContents,writeToParcel
describeContents方法可以不怎么管,就返回一个0就完事了。
writeToParcel方法,看方法名就是将数据写入到Parcel对象当中去。
下面看实现Parcelable接口后的Book类。
public class Book implements Parcelable{ private String name; private int isbn; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIsbn() { return isbn; } public void setIsbn(int isbn) { this.isbn = isbn; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel arg0, int arg1) { arg0.writeString(name); arg0.writeInt(isbn); } }
writeToParcel方法中的第一个参数就是Parcel对象,该对象中的write*()方法,基本上都是基本的数据类型。
完成上述步骤,就可以使用将Book对象以Parcelable形式进行传递了。比如Intent中的putExtra()可以使用Parcelable对象。
使用方法如下:
Book b = new Book(); b.setIsbn(1000);b.setName("abcd");Intent i = new Intent();i.putExtra("book", b);Book b2 = (Book)i.getParcelableExtra("book");Log.i("test", b2.getName() + ", " + b2.getIsbn());
另外Parcelable接口中还定义了一个名为Creator的接口,注释上写的是,必须要创建一个public的成员变量(field)名为CREATOR才行。
其中有一个createFromParcel()方法,和writeToParcel()为可逆的方法。
加上这个内部类的Book类如下:
public class Book implements Parcelable{ private String name; private int isbn; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIsbn() { return isbn; } public void setIsbn(int isbn) { this.isbn = isbn; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel arg0, int arg1) { arg0.writeString(name); arg0.writeInt(isbn); } public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() { @Override public Book createFromParcel(Parcel arg0) { Book b = new Book(); b.name = arg0.readString(); b.isbn = arg0.readInt(); return b; } @Override public Book[] newArray(int arg0) { return new Book[arg0]; } }; }
这里有一点需要注意!createFromParcel()方法和writeToParcel()方法中使用Parcel对象进行read*()和write*()操作的顺序必须要相同。
以上就是Parcelable的使用方法。
- Parcelable的基本使用
- Parcelable 基本使用
- Android Parcelable的使用
- Parcelable的使用
- Android Parcelable的使用
- Android Parcelable的使用
- Android Parcelable的使用
- Android Parcelable的使用
- Parcelable接口的使用
- Parcelable接口的使用
- Parcelable接口的使用
- Android Parcelable的使用
- Parcelable接口的使用
- Parcelable接口的使用
- Parcelable接口的使用
- Parcelable接口的使用
- Parcelable接口的使用
- Parcelable接口的使用
- 实现LinearLayout(垂直布局,Gravity内容排布)
- supervisor管理进程
- github使用指南(已被markdown版本替代)
- Android动画原理分析
- 《编译原理》学习总结(1)
- Parcelable的基本使用
- java Network programming using socket(2)
- Reverse Linked List
- map/reduce执行流程
- TextView显示插入的图片
- 字典转模型需要注意的问题,以及第三方框架来处理字典转模型
- IOS菜鸟的所感所思(七)——获取网络图片并添加
- Android 手写签名和裁剪
- 排序算法代码汇总