在Intent片段上获取Serializable ArrayList

Ari*_*erá 13 android fragment android-intent kotlin

在我的片段上,我想得到ArrayList<Animal>.我创建了一个newInstance函数.

  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
    }
}
Run Code Online (Sandbox Code Playgroud)

在我身上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)
    }
}
Run Code Online (Sandbox Code Playgroud)

必需:找到ArrayList序列化!

无法转换为ArrayList.

Zoe*_*Zoe 15

如评论中所述,投下它:

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

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

并在输出上镜像:

无论如何,在这里施展都是必要的.否则你只会得到一个Serializable而不是你序列化的类.

animals = arguments.getSerializable(ARG_ANIMALS) as ArrayList<Animal>
Run Code Online (Sandbox Code Playgroud)

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

您可能希望查看使用List而不是ArrayList,以概括您接受哪些类型(包括实例的MutableList).

这仅适用于Animal实现Serializable.否则当你从捆绑中获取/获取列表时它会崩溃.如果列表中的类也是可序列化的,则列表仅可序列化.