On my fragment I want to get ArrayList<Animal>. I have created a newInstance function.

  companion object {
    private val ARG_TITLE = "ARG_TITLE"
    private val ARG_ANIMALS = "ARG_ANIMALS"

    fun newInstance(title: String,animals: ArrayList<Animal>): ExampleFragment{
        val fragment = ExampleFragment()
        val args = Bundle()
        args.putString(ARG_TITLE, title)
        args.putSerializable(ARG_ANIMALS, animals)
        fragment.arguments = args
        return fragment
    }
}

在我onCreate()岁的时候,我有这个.

 private var title: String = ""
lateinit private var animals:ArrayList<Animal>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    if (arguments != null) {
        title = arguments.getString(ARG_TITLE)
        animals = arguments.getSerializable(ARG_ANIMALS)
    }
}

But

必需:ArrayList已序列化!

也无法强制转换为ArrayList.

推荐答案

As mentioned in a comment, cast it:

注意:如果是ArrayList,则不需要强制转换为Serializable(这意味着ArrayList-List和MutableList受到不同的影响).ListMutableList必须强制转换为可序列化(否则会显示"不兼容类型"错误)

args.putSerializable(ARG_ANIMALS, animals as Serializable) //This is to cast it to the appropriate form in order for it to be serialized properly

并将其镜像到输出:

无论发生什么,在这里选角都是必要的.否则,只会得到一个可序列化的类,而不是已序列化的类

animals = arguments.getSerializable(ARG_ANIMALS) as ArrayList<Animal>

类型必须在菱形中指定,否则animals: ArrayList<Animal>ArrayList<*>不匹配会导致错误

不过,您可能希望研究使用列表而不是ArrayList,以概括您接受的类型(包括实例的可变列表).

只有当Animal实现Serializable时,这才有效.否则,当您从Bundle 包中放入/获取列表时,它将崩溃.只有当列表中的类太大时,列表才可序列化.

Kotlin相关问答推荐

Kotlin中函数引用的否定

在Jetpack Compose中创建波浪式文本动画:顺序中断问题

数据流弹性模板失败,出现错误&未知非复合转换urn";

Kotlin stlib中是否有用于将列表<;对<;A,B&>;转换为对<;列表<;A&>,列表<;B&>;的函数

如何在Spring Boot中注册新的集合工厂

为什么使用 return instance ?: synchronized(this) { instance ?: PreferenceParameterState(context) } 时无法获得单例?

如何将消费者放入 Kotlin 的 map 中?

判断 Kotlin 变量是否为函数

根据字符串值动态过滤数组列表 - kotlin

如果不在可组合函数中,如何获取 stringResource

如何使用 Hilt 注入应用程序:ViewModel 中的上下文?

在 Kotlin 中使用 @Parcelize 注释时如何忽略字段

Kotlin 和 Java 字符串拆分与正则表达式的区别

`this@classname` 在 Kotlin 中是什么意思?

Kotlin 有 array.indexOf 但我无法弄清楚如何做 array.indexOfBy { lambda }

Kotlin:sealed class cannot "contain" data classes?

如何将map函数应用于Kotlin中的数组并更改其值?

在 Kotlin 中创建 Spinner 时,如何在 Fragment 中的旋转屏幕上修复指定为非空的参数为空?

Kotlin中的函数接口

比较Kotlin的NaN