web-dev-qa-db-ja.com

Android Kotlin create classimplement Parcelable give a error in'override 'ofwriteToParcelメソッド

Parcelableを使用するために、私はKotlin 1.1.4のこのリリースに従いました: https://blog.jetbrains.com/kotlin/2017/08/kotlin-1-1-4-is-out/

この行をプロジェクトに追加します

androidExtensions {
    experimental = true
}

次に、クラスを定義します。

@Parcelize
class User(val firstName: String, val lastName: String) : Parcelable

WriteToParcel()メソッドとcreateFromParcel()メソッドは自動的に作成されます

override fun writeToParcel(parcel: Parcel, flags: Int) {
...
}

しかし、メッセージ付きの「override」キーワードにエラーがあります

OVERRIDING_WRITE_TO_PARCEL_IS_NOT_ALLOWED:「writeToParcel」のオーバーライドは許可されていません。代わりに「Parceler」コンパニオンオブジェクトを使用してください

正しい方法を教えてもらえますか?

編集:デフォルトのコンストラクターで定義されたプロパティのみがParcelに追加され、その他は追加されませんか?このクラスでこの警告が表示されます。

PROPERTY_WONT_BE_SERIALIZED:プロパティは「パーセル」にシリアル化されません。 '@Transient'アノテーションを追加して、警告を削除します

12
quangkid

Kotlin1.1.4バージョンを使用していることを確認してください

WriteToParcel/createFromParcelメソッドをオーバーライドする必要はありません。特定のことをしない限り、スタジオからエラーが発生しますが、このエラーは無視してかまいません。 @Parcelizeを理解するために、lintチェックはまだ更新されていません。対応するYouTrackの問題は次のとおりです。

https://youtrack.jetbrains.com/issue/KT-193

Createクラスを使用するには

enter image description here

それからそれを次のように渡す

enter image description here

それを取り戻すには

enter image description here

7
Pravin Londhe

これはリントチェックのみであるため、警告は無視しても問題ありません。
今のところそれを取り除くには@SuppressLint("ParcelCreator")を使用するだけです

例:

@SuppressLint("ParcelCreator")
@Parcelize
class User(val firstName: String, val lastName: String) : Parcelable
5
humazed