這是之前詢問的question的後續操作。我使用了Android Parcelable插件從https://github.com/nekocode/android-parcelable-intellij-plugin-kotlin 繼bennyl的建議下,我改變了構造函數生成的代碼,以構造函數以kotlin派生類中的可分發構造函數
class ChessClock(context:Context) : TextView(context), Parcelable {
lateinit var player:String
constructor(context:Context, p:String, angle:Float) : this(context) {
player = p
rotation = angle
}
}
,這擺脫了我曾問起語法錯誤。我現在還有另一個我最初忽略的問題。
該插件生成writeToParcel
驗證碼:
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(player)
parcel.writeFloat(rotation)
parcel.writeLong(mTime)
parcel.writeInt(mState)
}
與此構造:
constructor(parcel: Parcel) :this() {
player = parcel.readString()
rotation = parcel.readFloat()
mTime = parcel.readLong()
mState = parcel.readInt()
}
(其實,我添加了旋轉的線,但是這不重要。)
現在,構造函數將不會編譯。 this
加下劃線,我看到提示 我希望看到類似的東西,
constructor(parcel: Parcel) :this(context, parcel.readString(), parcel.readFloat()) {
mTime = parcel.readLong()
mState = parcel.readInt()
}
但如果我嘗試,我得到的消息,「超類構造函數被調用之前無法訪問上下文。」我對kotlin(和android)很新,我不明白這裏發生了什麼。我試過調用super
,但它告訴我預計會調用主構造函數。我也嘗試調用TextView(),但它告訴我預計會撥打this
或super
。
我看不出有寫的背景下,以包裹的方式,(我不知道這意味着)
你能告訴我的代碼應當如何修改,更重要的是,你能解釋爲什麼嗎?
'context'不是你的'構造函數(parcel:Parcel)的參數' – Les