我正在努力解决一个问题,但找不到任何特定的解决方案。
基类
open class FeedBase() : Parcelable{
var type : String =""
constructor(parcel: Parcel) : this() {
type=parcel.readString()
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(type)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR: Parcelable.Creator<FeedBase> {
override fun createFromParcel(parcel: Parcel): FeedBase {
return FeedBase(parcel)
}
override fun newArray(size: Int): Array<FeedBase?> {
return arrayOfNulls(size)
}
}}
包含数据类和扩展基类的Item类
@Parcelize
data class FeedItem(var feed:Feed) : FeedBase()
&数据类
@Parcelize
data class Feed(var test:String,var score:Int) : Parcelable
现在,我正在尝试跨活动发送数据,并且正在创建对象,如下所示
val feedItem = FeedItem(Feed("yolo", 1000))
feedItem.type="test"
但是我无法获得正确的类型(基本类中的var)。每当我在另一个活动中从可拆分意图接收到对象时,它就会变空,但会保留Item数据。我该如何解决?
答案 0 :(得分:0)
@Parcelize
requires all serialized properties to be declared in the primary constructor.
因此,它对type
一无所知。在@Parcelize
生成的代码中,您基本上拥有
companion object CREATOR: Parcelable.Creator<FeedItem> {
override fun createFromParcel(parcel: Parcel): FeedItem{
val feed = Feed.CREATOR.createFromParcel(parcel)
return FeedItem(feed)
}
}
请注意,FeedBase
的{{1}}实现并不重要。如果您考虑过,它就不能使用:如果您有
Parcelable
无法将这个val feedBase = FeedBase.CREATOR.createFromParcel(parcel)
实例转换为FeedBase
实例。
在这种情况下,您需要通过在伴随对象中实现FeedItem
来编写自定义逻辑。