Kotlin 使用 Parcelable 将 ListArray 传递给另一个 Activity

Kotlin Passing ListArray to another Activity using Parcelable

我有一个自定义 class 填充了用户的信息。我使用 ArrayList 来保存所有用户 class 数据。我想将数组传递给另一个 activity,在那里它可以被读取和修改。由于数组可能很大,我需要这个过程尽可能高效和快速地完成,这就是为什么我选择使用 Parcelable 而不是 Serializable。

我在使用 Kotlin 时遇到问题。有很多 Java 教程,但 none 在 Kotlin 中,这就是使这个问题与其他所有问题不同的原因。有人可以提供并解释 Kotlin 中的代码,说明如何实现这一点吗?

这是我目前拥有的:

constructor(`in`:Parcel) {
    CollegeName = `in`.readString()
}

override fun describeContents(): Int {
    return 0
}

override fun writeToParcel(dest: Parcel?, flags: Int) {

}

private fun readFromParcel(`in`:Parcel) {
    CollegeName = `in`.readString()
}

companion object {
    @JvmField final val CREATOR: Parcelable.Creator<College> = object: Parcelable.Creator<College> {

        override fun createFromParcel(source: Parcel): College {
            return College(source)
        }

        override fun newArray(size: Int): Array<College?> {
            return arrayOfNulls<College>(size)
        }
    }
}

使用这样的东西...

   class Series() : Parcelable {
  private var name: String? = null
  private var numOfSeason: Int = 0
  private var numOfEpisode: Int = 0

  constructor(parcel: Parcel) : this() {
    val data = arrayOfNulls<String>(3)
    parcel.readStringArray(data)
    this.name = data[0]
    this.numOfSeason = Integer.parseInt(data[1])
    this.numOfEpisode = Integer.parseInt(data[2])
  }


  override fun writeToParcel(parcel: Parcel, flags: Int) {
    parcel.writeString(name);
    parcel.writeInt(numOfSeason);
    parcel.writeInt(numOfEpisode);
  }

  private fun readFromParcel(parcel: Parcel){
    name = parcel.readString()
    numOfSeason = parcel.readInt()
    numOfEpisode = parcel.readInt()
  }
  override fun describeContents(): Int {
    return 0
  }

  companion object CREATOR : Creator<Series> {
    override fun createFromParcel(parcel: Parcel): Series {
      return Series(parcel)
    }

    override fun newArray(size: Int): Array<Series?> {
      return arrayOfNulls(size)
    }
  }

}

然后在你的 Activity

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)

        val i = Intent(this, SecondActivity::class.java)

val testing = ArrayList<testparcel>()

i.putParcelableArrayListExtra("extraextra", testing)
startActivity(i)
}

class SecondActivity :Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
        setContentView(R.layout.secondActivty_activity)

val testing = this.intent.getParcelableArrayListExtra<Parcelable>("extraextra")
    }
}