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

问题描述

我正在为 Parcelable 创建一个数据类。 但无法找到解决方案,即如何在 kotlin 中读取 Parcelable 类中的整数 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
        

这是我的完整数据类代码

import android.os.Parcel
import android.os.Parcelable
data class PostCardsListData(
    var arrDescriptionsTags: ArrayList<String?>?,) : 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)
        }
    }
}

解决方法

所以要创建一个可打包的类。

首先在gradle中添加插件

plugins {
    .
    .
    id 'kotlin-parcelize'
}

然后,创建一个类并使用注解对数据进行分块

@Parcelize
class PostCardsListData(

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

) : Parcelable 

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

在activity/fragment/viewModel类中

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);
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...