如何在 android 中读取 parcelable 中的 Int arraylist

how to read Int arraylist in parcelable in android

我正在为 Parcelable 制作数据 class。 但无法找到解决方案,如何在 kotlin 中读取 Parcelable class 中的整数 ArrayList。 我知道 String,但我在 Int 类型 ArrayList 中遇到问题。

var priceDetail: ArrayList<Int?>?,

有关详细信息,请参阅此内容,

    data class PostCardsListData(
        var arrDescriptionsTags: ArrayList<String?>?,
        var priceDetail: ArrayList<Int?>?,
..........

: Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.createStringArrayList(), // i know about string
        //but how to read this Integer arraylist
        

这是我的完整数据class代码

import android.os.Parcel
import android.os.Parcelable
data class PostCardsListData(
    var arrDescriptionsTags: ArrayList<String?>?,
    var priceDetail: ArrayList<Int?>?,

) : Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.createStringArrayList(),
        parcel.//describe me what i will write here

    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeStringList(arrDescriptionsTags)
        parcel.write//describe me what i will write here
    }

    override fun describeContents(): Int {
        return 0
    }

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

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

所以要创建一个 parcelable class。

首先,添加插件到gradle

plugins {
    .
    .
    id 'kotlin-parcelize'
}

然后,创建一个class并使用注释来分割数据

@Parcelize
class PostCardsListData(

    @SerializedName("arrDescriptionsTags")
    var arrDescriptionsTags: ArrayList<String>? = null,

    @SerializedName("priceDetail")
    var priceDetail: ArrayList<Int?>? = null

) : Parcelable 

要 read/write 数据,您只需创建此 class 的对象并使用点运算符访问列表。

在activity/fragment/viewModelclass

private var listData = PostCardsListData()

//read data

private var priceList : ArrayList<Int> = ArrayList()
if(listData.priceDetail != null){
    priceList.addAll(listData.priceDetail)
}
public void writeToParcel(Parcel out, int flags) {
   out.writeList(priceDetail);
}

private PostCardsListData(Parcel in) {
   priceDetail = new ArrayList<>();
   in.readList(priceDetail, Integer.class.getClassLoader());
}

或自定义 类 使用

public void writeToParcel(Parcel out, int flags) {
   out.writeTypedList(listCustomClass);
}

private PostCardsListData(Parcel in) {
   listCustomClass = in.createTypedArrayList(CustomClass.CREATOR);
}