除了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
相关产品推荐
相关产品推荐

