所以我一直在研究如何在 Activity 之间传递数据,我发现有以下三种方式:
1) 直接来自 Intent
2) 可打包
3) bundle
Parcelable
和 Bundle
有什么区别?我们什么时候应该使用它们?
最佳答案
- >
Parcelable
是由某个模型类实现的接口(interface)。如果类实现了Parcelable
,则可以从 Parcel 序列化和反序列化此类的实例。Parcelable
是 javaSerializable
接口(interface)的有效 android 模拟。
实现Parcelable
的例子:
data class User(val id: Long, val email: String?) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readLong(),
parcel.readString()) {
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeLong(id)
dest.writeString(email)
}
override fun describeContents(): Int = 0
companion object CREATOR : Parcelable.Creator<User> {
override fun createFromParcel(parcel: Parcel): User {
return User(parcel)
}
override fun newArray(size: Int): Array<User?> {
return arrayOfNulls(size)
}
}
}
在 kotlin 中还有 @Parcelize
注解,它在大多数情况下简化了过程:
@Parcelize
data class User(val id: Long, val email: String?) : Parcelable
Bundle
是 android 标准类型命名值的容器(包括Parcelable
),用于在 Activity 、 fragment 和其他 android 应用程序实体之间传递数据。val user = User(1L, "email@email.email") val bundle = Bundle().apply { putLong("userId", user.id) putString("userEmail", user.email) putParcelable("user", user) } val userId = bundle.getLong("userId") val userEmail = bundle.getString("userEmail") val user1: User? = bundle.getParcelable("user")
关于java - bundle 和 parcelable 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59503841/