android实体类的Parcelable
在android的Intent中,我可能要传递一些复杂的数据类型,如list
参考文章:http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0204/3944.html
Parcelable的源码:
public interface Parcelable { public static final int PARCELABLE_WRITE_RETURN_VALUE = 0x0001; public static final int CONTENTS_FILE_DESCRIPTOR = 0x0001; //内容描述方法,可以不看 public int describeContents(); //相当于将实体类写入Parcel方法, public void writeToParcel(Parcel dest, int flags); //读取接口 public interface Creator { public T createFromParcel(Parcel source); public T[] newArray(int size); }}
Parcelable使用步骤
1. implements Parcelable 实现Parcelable的方法
2.重写writeToParel方法,将实体类的参数写入
3.重写describeContentes方法,默认返回0即可
4.实例化静态内部对象CREATOR实现接口Parcelable.Creator
理解:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象,也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,再通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。
Parcelable示例:
import android.os.Parcel;import android.os.Parcelable;/** * Created by 4 on 2016/4/6. */public class Student implements Parcelable{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //内容描述方法 @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } private static final Parcelable.Creator CREATOR = new Parcelable.Creator(){ @Override public Student createFromParcel(Parcel source) { return new Student(source); } @Override public Student[] newArray(int size) { return new Student[size]; } }; protected Student(Parcel parcel){ this.name = parcel.readString(); this.age = parcel.readInt(); }}
在Android Studio中可以快速实现对象的Parcelable化
1.安装Android Parcelable code generator插件
打开File ---> Settings ---> Plugins ---> Browse repositories...
重启Android studio,显示下图,则说明安装成功
使用插件Parcelable化对象,右键对象空白处,选择 Generate(生成)---->Parcelable--->OK
生成的代码:
import android.os.Parcel;import android.os.Parcelable;/** * Created by 4 on 2016/4/5. */public class Book implements Parcelable { private String bookName; private int bookNum; public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public int getBookNum() { return bookNum; } public void setBookNum(int bookNum) { this.bookNum = bookNum; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.bookName); dest.writeInt(this.bookNum); } public Book() { } protected Book(Parcel in) { this.bookName = in.readString(); this.bookNum = in.readInt(); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Book createFromParcel(Parcel source) { return new Book(source); } @Override public Book[] newArray(int size) { return new Book[size]; } };}
更多相关文章
- android service 通过broadcast通知Myreceiver 启动activity
- Android之Content Providers
- Android(安卓)LruCache原理及使用(对象软引用不行,使用LRU算法)
- 【Android】Handler、Looper源码分析
- android 关系型数据库 SQLiteDatabase的 增 删 改 查
- Android(安卓)通过 Intent 传递类对象或list对象
- Android之handler篇
- Android(安卓)HandlerThread的用法
- Android(安卓)studio 快捷键汇总