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的使用方法。

0 0
原创粉丝点击