You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin如何在Activity之间传递自定义类型的MutableList或ArrayList

解决方案

问题根源

  • 第一次报错是因为你调用了putStringArrayListExtra(),这个API只能接收元素为String类型的列表,你传入的是Memes类型列表,自然类型不匹配
  • 第二次尝试运行报错的核心原因是你的Memes自定义类没有实现Android推荐的Parcelable序列化接口,Intent无法直接序列化传递自定义类型的对象

落地实现步骤

步骤1:添加kotlin-parcelize插件支持

在你的App模块级build.gradle.kts(或者groovy版本的build.gradle)的plugins块中添加插件:

// 如果是kts格式
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    // 新增这一行
    id("kotlin-parcelize")
}

如果是groovy格式:

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    // 新增这一行
    id 'kotlin-parcelize'
}

添加后同步Gradle即可。

步骤2:修改Memes类实现Parcelable接口

直接用@Parcelize注解自动生成序列化逻辑,修改后的代码如下:

import android.os.Parcelable
import com.google.gson.annotations.SerializedName
import kotlinx.parcelize.Parcelize

@Parcelize
class Memes (
    @SerializedName("id") var id: Long,
    @SerializedName("title") var title: String
) : Parcelable

步骤3:Activity A中传递数据

推荐用Parcelable列表的专属API传递,代码更清晰:

val extras = Bundle()
extras.putString("gal", "animals")
extras.putString("query", "")

val i = Intent(context, GalleryShow::class.java)
// 把MutableList转成ArrayList<Memes>传入
i.putParcelableArrayListExtra("list", ArrayList(memes))
i.putExtras(extras)
(context as Activity).startActivityForResult(i, 777)

步骤4:Activity B中接收数据

用空安全的方式接收,避免空指针崩溃:

private lateinit var memes: MutableList<Memes>

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

    // 接收Parcelable列表,取不到的话默认赋值为空可变列表,避免崩溃
    memes = intent?.getParcelableArrayListExtra<Memes>("list")?.toMutableList() ?: mutableListOf()

    // 你的其他参数接收也可以直接从intent取,不需要走extras,更简洁
    val gal = intent?.getStringExtra("gal") ?: ""
    val query = intent?.getStringExtra("query") ?: ""
}

内容的提问来源于stack exchange,提问作者TheGreatCornholio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 00:15:06