【问题标题】:Kotlin Passing ListArray to another Activity using Parcelable [duplicate]Kotlin使用Parcelable将ListArray传递给另一个活动[重复]
【发布时间】:2017-08-01 00:27:21
【问题描述】:

我有一个包含用户信息的自定义类。我使用 ArrayList 来保存所有 User 类数据。我想将数组传递给另一个可以读取和修改它的活动。由于数组可能很大,我需要尽可能高效和快速地完成这个过程,这就是我选择使用 Parcelable 而不是 Serializable 的原因。

我在使用 Kotlin 时遇到了麻烦。有很多 Java 教程,但没有一个是在 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)
        }
    }
}

【问题讨论】:

  • 你卡在哪里了?
  • Android Studio 有一个功能,您可以将 Java 代码粘贴到 Kotlin 类中,并将其转换为 Kotlin。这可能足以帮助您解决问题
  • 我不知道该做什么或使用什么代码。没有关于如何做到这一点的 Kotlin 教程
  • 问题是我希望它在 Kotlin 中,而不是在 Java 中,所以它不是上面链接的副本。
  • 你能添加一些代码吗?例如:您要在 Activity 之间传输的数据?

标签: android class arraylist kotlin parcelable


【解决方案1】:

使用类似的东西...

   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)
    }
  }

}

然后在你的活动中

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")
    }
}

【讨论】:

  • 这是Java,我用的是Kotlin
  • 我已将其更改为 Kotlin。希望这会有所帮助
  • 谢谢!这很有效,也很有帮助。
猜你喜欢
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多