gpt4 book ai didi

java - bundle 和 parcelable 的区别

转载 作者:行者123 更新时间:2023-11-30 04:54:15 24 4
gpt4 key购买 nike

所以我一直在研究如何在 Activity 之间传递数据,我发现有以下三种方式:

1) 直接来自 Intent

2) 可打包

3) bundle

ParcelableBundle 有什么区别?我们什么时候应该使用它们?

最佳答案

  1. > Parcelable是由某个模型类实现的接口(interface)。如果类实现了 Parcelable,则可以从 Parcel 序列化和反序列化此类的实例。 Parcelable 是 java Serializable 接口(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
  1. 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com