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

Kotlin如何将自定义对象存入Bundle实现Fragment间数据传递

报错原因

你需要存入Bundle的CheckListModel类未实现Serializable接口,putSerializable方法要求传入的对象必须完全实现序列化接口,且其内部所有属性对应的类型也需要支持序列化,你当前仅为嵌套的CheckListPoints实现了序列化,外层主类不满足要求,因此触发运行时异常。

解决方案

方案1:补充实现Serializable接口

直接给CheckListModel新增Serializable接口实现即可,修改后代码如下:

import java.io.Serializable

data class CheckListModel (
    val checkListName: String,
    val checkListCount: Int,
    val checkListPoints: List<CheckListPoints>,
    val checkListResult: Int,
    val description: String
) : Serializable // 新增此行实现序列化接口

data class CheckListPoints(
    var correctly: Boolean,
    var requirement: String,
    var passed: Boolean,
) : Serializable

在目标Fragment读取数据时建议做好空安全判断,避免类型转换崩溃:

// 目标Fragment中获取传递数据
val checkModel = arguments?.getSerializable("data") as? CheckListModel
checkModel?.let {
    // 执行你的业务逻辑
}

方案2(可选优化):使用Parcelable实现序列化

Android平台更推荐使用Parcelable实现序列化,性能远高于Serializable,配合Kotlin的@Parcelize注解可以快速实现,无需手动写序列化逻辑:

  1. 首先在模块级build.gradle中启用kotlin-parcelize插件
  2. 修改数据类代码如下:
import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
data class CheckListModel (
    val checkListName: String,
    val checkListCount: Int,
    val checkListPoints: List<CheckListPoints>,
    val checkListResult: Int,
    val description: String
) : Parcelable

@Parcelize
data class CheckListPoints(
    var correctly: Boolean,
    var requirement: String,
    var passed: Boolean,
) : Parcelable

传递数据时改用putParcelable方法,读取时用getParcelable即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:45:04