问题描述
我正在为 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);
}