Parcelable 是 Android 中的一个接口,用于实现将对象序列化为字节流的功能,以便在不同组件之间传递。与 Java 的 Serializable 接口不同,Parcelable 的性能更高,适用于 Android 平台。
要实现 Parcelable 接口,我们需要在对象类中实现以下方法:
- writeToParcel(Parcel dest, int flags):将对象的数据写入 Parcel 对象中。
- describeContents():返回对象的特殊标记,一般返回 0 即可。
- CREATOR:一个静态常量,用于创建 Parcelable 对象的实例。
下面是一个示例代码,用于演示如何实现 Parcelable 接口:
public class Book implements Parcelable {private String title;private String author;private int publishYear;// 构造方法public Book(String title, String author, int publishYear) {this.title = title;this.author = author;this.publishYear = publishYear;}// 从 Parcel 对象中读取数据,并赋值给对象的属性protected Book(Parcel in) {title = in.readString();author = in.readString();publishYear = in.readInt();}// 将对象的数据写入 Parcel 对象中@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(title);dest.writeString(author);dest.writeInt(publishYear);}// 返回对象的特殊标记,一般返回 0 即可@Overridepublic int describeContents() {return 0;}// 创建 Parcelable 对象的实例public static final Creator<Book> CREATOR = new Creator<Book>() {@Overridepublic Book createFromParcel(Parcel in) {return new Book(in);}@Overridepublic Book[] newArray(int size) {return new Book[size];}};// 其他方法和属性的定义...// 示例代码中只实现了一些必要的方法,如果需要使用 Parcelable 进行数据传递,可以根据实际需求完善其他方法和属性。
}
这是一个简单的 Book 类,实现了 Parcelable 接口。通过 writeToParcel() 方法,我们将对象的数据写入 Parcel 对象中;而通过 protected 的构造方法和 CREATOR,我们可以从 Parcel 对象中读取数据,并创建出 Book 对象的实例。
要使用 Parcelable 对象进行传递,可以将其放入 Intent 或 Bundle 中,然后在另一个组件中取出。例如,我们可以在一个 Activity 中创建一个 Book 对象,并将其传递给另一个 Activity:
// 创建一个 Book 对象
Book book = new Book("Android Development", "John Smith", 2022);// 将 Book 对象放入 Intent 中
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("book_key", book);
startActivity(intent);
在接收 Book 对象的另一个 Activity 中,我们可以这样获取:
// 在 onCreate() 方法中获取 Intent
Intent intent = getIntent();// 从 Intent 中取出 Book 对象
Book book = intent.getParcelableExtra("book_key");// 使用 Book 对象的属性
String title = book.getTitle();
String author = book.getAuthor();
int publishYear = book.getPublishYear();
这是一个简单的 Parcelable 示例,可以在当前主流的 Android 版本上正确运行。请注意,示例代码中的 Book 类只是一个示例,实际使用 Parcelable 时,需要根据自己的需求定义相应的类,并实现 Parcelable 接口。