Kotlin:如何传递含Bitmap的Pricecard列表至另一个Activity?
解决Parcelable传递Bitmap的错误问题
原代码的核心错误
writeToParcel方法里用writeString()写入Bitmap对象,类型完全不匹配,Bitmap不是字符串,必然报错。- 构造函数中用
parcel.readValue()读取Bitmap,既没指定正确的类加载器,也不适合读取Parcelable类型的对象。
修正后的完整代码
import android.graphics.Bitmap import android.os.Parcel import android.os.Parcelable class Pricecard(val img: Bitmap?, val title: String?, val weight: String?, val price: String?, val code: String?) : Parcelable { constructor(parcel: Parcel) : this( parcel.readParcelable(Bitmap::class.java.classLoader), parcel.readString(), parcel.readString(), parcel.readString(), parcel.readString() ) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeParcelable(img, flags) parcel.writeString(title) parcel.writeString(weight) parcel.writeString(price) parcel.writeString(code) } override fun describeContents(): Int { return 0 } companion object CREATOR : Parcelable.Creator<Pricecard> { override fun createFromParcel(parcel: Parcel): Pricecard { return Pricecard(parcel) } override fun newArray(size: Int): Array<Pricecard?> { return arrayOfNulls(size) } } }
修正说明
- 写入Bitmap:改用
parcel.writeParcelable(img, flags),因为Bitmap本身实现了Parcelable接口,用专门的Parcelable写入方法能正确处理对象,同时自动兼容null值。 - 读取Bitmap:用
parcel.readParcelable(Bitmap::class.java.classLoader)替代readValue(),指定Bitmap的类加载器,确保能正确解析出Parcelable类型的Bitmap对象。
列表传递与接收方式
源Activity传递列表
// 假设你已经创建好Pricecard列表 val priceCardList = mutableListOf<Pricecard>() // 添加数据到列表... val intent = Intent(this, TargetActivity::class.java) // 把列表转成ArrayList传入 intent.putParcelableArrayListExtra("PRICE_CARD_LIST", ArrayList(priceCardList)) startActivity(intent)
目标Activity接收列表
val receivedList = intent.getParcelableArrayListExtra<Pricecard>("PRICE_CARD_LIST") // 遍历receivedList即可展示每个Pricecard的内容
内容的提问来源于stack exchange,提问作者Meo11
相关产品推荐
相关产品推荐

