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

除了getParcelableArrayListExtra,还有其他获取Parcelable数组列表的方法吗?

获取Parcelable类型数组列表的替代方法

除了getParcelableArrayListExtra,还有以下几种方式可以获取Parcelable类型的数组列表:

1. 使用getParcelableArrayExtra转换为列表

通过getParcelableArrayExtra获取Parcelable数组,再将其转换为列表。建议用安全转换避免异常:

// 发送端代码保持不变,接收端修改如下
try {
    val parcelableArray = intent.getParcelableArrayExtra("images")
    // 替换YourImageParcelable为你实际的Parcelable子类
    imageList = parcelableArray?.mapNotNull { it as? YourImageParcelable } as ArrayList<YourImageParcelable>? ?: arrayListOf()
    viewPagerposition = intent.getIntExtra("position", 0)
    isFrom = intent.getStringExtra("isFrom") == "downloaded"
} catch (e: Exception) {
    e.printStackTrace()
}

mapNotNull配合as?可以过滤转换失败的元素,避免抛出ClassCastException。

2. API 33+ 泛型重载版getParcelableArrayListExtra

在Android 13(API 33)及以上系统,官方提供了带泛型参数的getParcelableArrayListExtra重载方法,无需手动强转,类型安全性更高:

// 接收端代码
imageList = intent.getParcelableArrayListExtra("images", YourImageParcelable::class.java) ?: arrayListOf()

这是官方对原有方法的升级,比旧版无泛型的写法更简洁安全。

3. 备选方案:使用Serializable(不推荐)

如果你的Parcelable类同时实现了Serializable接口,也可以用getSerializableExtra获取后转换为ArrayList:

val serializableList = intent.getSerializableExtra("images")
imageList = serializableList as? ArrayList<YourImageParcelable> ?: arrayListOf()

但不推荐这种方式,因为Serializable在Android平台的性能远不如Parcelable,仅作为极端兼容场景的备选。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:10:24