首页 > 解决方案 > Android - startActivityForResult onActivityResult 获取 ArrayList

问题描述

这就是我发送 ArrayList 的方式:

val extras = Bundle()

val i = Intent(context, GalleryShow::class.java)
i.putExtra("list", ArrayList(memes))
(context as Activity).startActivityForResult(i, 777)

并在活动 B 中接收它:

intent.getParcelableArrayListExtra<Memes>("list") as ArrayList<Memes>

然后在修改它之后,我设置了假设回到活动 A 的意图:

private lateinit var finishIntent: Intent

finishIntent = Intent()

finishIntent.putExtra("list", ArrayList(modifiedMemes))
setResult(RESULT_OK, finishIntent)

并尝试在 A 中接收它:

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, intent)

    if(requestCode == 777 && resultCode == RESULT_OK && data != null) {

        if(data.hasExtra("list")) {
            val updatedMemes = intent.getParcelableArrayListExtra<Memes>("list") as ArrayList<Memes>
        }
    }
}

所以我将它设置为从 a 到 b 发送和接收的方式完全相同,但我得到了错误:

kotlin.TypeCastException: null cannot be cast to non-null

val updatedMemes = intent.getParcelableArrayListExtra<Memes>("list") as ArrayList<Memes>

这里有什么问题?谷歌真的在乎安卓是一大堆功能失调的狗屎吗?

标签: androidkotlinandroid-intent

解决方案


您正在阅读错误的意图 - 您正在使用intent.getParcelableArrayListExtra<Memes>("list") as ArrayList<Memes>,指的intent是您的 Activity 的属性,而不是data您收到的Intent onActivityResult()

val updatedMemes = data.getParcelableArrayListExtra<Memes>("list") as ArrayList<Memes>

推荐阅读