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")
}
}
我有一个自定义 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")
}
}