码迷,mamicode.com
首页 > 其他好文 > 详细

Parcelable的基本使用

时间:2015-03-04 18:26:04      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

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的基本使用

标签:

原文地址:http://www.cnblogs.com/kross/p/4313786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!