kotlin parcelable

Step 1: Define a data class

data class MyDataClass(val id: Int, val name: String)

Step 2: Implement the Parcelable interface

import android.os.Parcel
import android.os.Parcelable

data class MyDataClass(val id: Int, val name: String) : Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.readInt(),
        parcel.readString() ?: ""
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(id)
        parcel.writeString(name)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<MyDataClass> {
        override fun createFromParcel(parcel: Parcel): MyDataClass {
            return MyDataClass(parcel)
        }

        override fun newArray(size: Int): Array<MyDataClass?> {
            return arrayOfNulls(size)
        }
    }
}

Step 3: Use Parcelable in an activity or fragment

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Create an instance of MyDataClass
        val myData = MyDataClass(id = 1, name = "Example")

        // Create a Bundle and put the Parcelable object into it
        val bundle = Bundle()
        bundle.putParcelable("myDataKey", myData)

        // Retrieve the Parcelable object from the Bundle
        val retrievedData = bundle.getParcelable<MyDataClass>("myDataKey")

        // Access the properties of the retrieved object
        val retrievedId = retrievedData?.id
        val retrievedName = retrievedData?.name
    }
}