如何通过 kotlin 中的意图传递对象的 MutableList

Posted

技术标签:

【中文标题】如何通过 kotlin 中的意图传递对象的 MutableList【英文标题】:How to pass MutableList of object via intent in kotlin 【发布时间】:2020-07-29 06:24:11 【问题描述】:

我的数据类为

@Parcelize
data class Workouts(val id:Int ,val name:String,val image:Int,val time:Long):Parcelable

在一项活动中,我初始化了可变列表,并向 MutuableList 添加了一些数据

   val listRandom= mutableListOf<Workouts>()
     listRandom.add(some datas............)

现在我使用 Intent 将 listRandom 传递给下一个活动

 val intent =Intent(this,StartWorkout::class.java)
            intent.putExtra("workoutlist",listRandom as Parcelable)

现在在下一个活动中,我正在尝试接收数据

 val randomWorkout =intent.getParcelableExtra<MutableList<Workouts>>("workoutlist")

所以在从 Intent 接收数据时出现错误,它说 Expected Parcelable but found MutuableList

所以我想做的只是传递对象列表,所以有没有其他方法可以做到这一点?

【问题讨论】:

【参考方案1】:

只需将您的 mutableListOf&lt;Workouts&gt;() 转换为 ArrayList,如下所示:

val listRandom= ArrayList<User>()
val intent = Intent(this, StartWorkout::class.java)
intent.putExtra("workoutlist",listRandom)

下一个活动:

val randomWorkout : ArrayList<User> = intent.getParcelableExtra("workoutlist")

它会起作用的。

【讨论】:

它说 Type inference failed: Not enough information to infer parameter T in fun getParcelableExtra(p0: String!): T!请明确指定。【参考方案2】:

putParcelableArrayListExtraArrayList 一起使用

val listRandom= ArrayList<Workouts>()
val intent = Intent(this, StartWorkout::class.java)
intent.putParcelableArrayListExtra("workoutlist",listRandom)

然后用

val list=intent?.getParcelableArrayListExtra<Workouts>("workoutlist")

【讨论】:

另一个一开始没有展示如何转换的人

以上是关于如何通过 kotlin 中的意图传递对象的 MutableList的主要内容,如果未能解决你的问题,请参考以下文章

将一个 mutableList 从活动 A 传递到 Kotlin 中的活动 B。

如何通过具有不可序列化数据的意图传递数组或数组列表?

当我使用 Serializable 出错时,如何使用意图传递自定义对象列表

通过意图传递对象时应用程序崩溃

通过意图传递可序列化对象

如何从片段 KOTLIN 中调用意图 [重复]