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

Kotlin:Intent传递ArrayList后无法适配ListView的问题

问题解决:Intent传递ArrayList后在ListView正确展示

错误原因分析

  1. 获取方式错误:你传递的是ArrayList<String>,但使用了getStringArrayExtra(),这个方法仅用于获取String[]类型数据,无法正确读取ArrayList。
  2. 类型转换错误:调用.toString()会把ArrayList转换成描述性字符串(比如[item1, item2]),而非保留集合类型,导致ArrayAdapter无法识别为有效数据源。
  3. 冗余循环:在循环中重复创建并设置Adapter完全没必要,只需初始化一次即可完成绑定。

正确实现步骤

1. 目标Activity中正确获取ArrayList

直接使用getStringArrayListExtra()方法接收,它专门适配ArrayList<String>类型的Intent数据:

val qrResultList = intent.getStringArrayListExtra("qrResultList") ?: arrayListOf()

注:?: arrayListOf()是为空兜底处理,避免Intent无数据时触发空指针异常。

如果需要兼容更通用的序列化场景,也可以用getSerializableExtra()强转:

val qrResultList = intent.getSerializableExtra("qrResultList") as? ArrayList<String> ?: arrayListOf()

2. 初始化Adapter并绑定ListView

无需循环,直接将ArrayList作为数据源传入ArrayAdapter,再绑定到ListView:

// 创建ArrayAdapter
val arrayAdapter = ArrayAdapter(
    this,
    android.R.layout.simple_list_item_1,
    qrResultList
)
// 绑定到ListView
qrlistview.adapter = arrayAdapter
// 设置列表项点击事件
qrlistview.setOnItemClickListener { _, _, position, _ ->
    val selectedItem = qrResultList[position]
    Toast.makeText(this, "Item Selected $selectedItem", Toast.LENGTH_LONG).show()
}

完整目标Activity代码示例

class QRSessionFullList : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_qr_session_full_list)

        // 获取传递的ArrayList
        val qrResultList = intent.getStringArrayListExtra("qrResultList") ?: arrayListOf()

        // 初始化Adapter并绑定ListView
        val arrayAdapter = ArrayAdapter(
            this,
            android.R.layout.simple_list_item_1,
            qrResultList
        )
        qrlistview.adapter = arrayAdapter

        // 设置列表项点击事件
        qrlistview.setOnItemClickListener { _, _, position, _ ->
            Toast.makeText(this, "Item Selected ${qrResultList[position]}", Toast.LENGTH_LONG).show()
        }
    }
}

额外说明

  • MainActivity中的传递代码无需修改,因为ArrayList<String>实现了Serializable接口,Intent可直接传递这类可序列化集合。
  • 确保布局文件中ListView的id为qrlistview,否则会出现控件找不到的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:35:05