如何在Kotlin中实现List <data class>子列表的可拆分的实现?

问题描述

我想将数据类用于可包裹的其他活动。但是,当我想要使用variabel类型列表时,我就卡住了。我不知道如何实现,因为这是我第一次使用包裹式

这是我的POJO /模型

@Parcelize
data class HistoryTree(
val id: Int,val landOwner: String,val treeNumber: String,val membershipId: String,val speciesId: Int,val speciesName: String,val diameter: Double,val areaName: String,val woodProducts: List<HistoryProduct>) :Parcelable

@Parcelize
data class HistoryProduct(
val id: Int,val treeId: Int,val logStatus: Int,val orderId: Int,val logSequenceNumber: Int,val logNumber: String,val diameter: String,val length: String,val circumference: String,val logType: Int,val statusPecah: Int?,val lubangGerek: Int?,val pinhole: Int?,val belimbing: Int?,val createdBy: Int,val deleted: Int,val isTake: Int,val rejectStatusPetani: Int
) : Parcelable

这是我的活动

package com.sobi.penebangan.historylist
class HistoryListActivity : AppCompatActivity(),Coroutinescope {
private lateinit var job: Job
override val coroutineContext: CoroutineContext
    get() = dispatchers.Main + job

@Inject
lateinit var viewmodelFactory: viewmodelProvider.Factory

private val vm: HistoryListviewmodel by lazy { viewmodelProviders.of(this,viewmodelFactory).get(HistoryListviewmodel::class.java) }

private var trees = mutablelistof<HistoryTree>()

private val treeAdapter = object : RecyclerView.Adapter<HistoryItemViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): HistoryItemViewHolder {
        val ui = HistoryItemUi()
        val view = ui.createView(AnkoContext.create(parent.context,parent))
        return HistoryItemViewHolder(ui,view)
    }

    override fun getItemCount(): Int = trees.size



    override fun onBindViewHolder(holder: HistoryItemViewHolder,position: Int) {
        holder.bind(trees[position]) {
            val product = it.woodProducts
            val activity = Intent(this@HistoryListActivity,ProductHistoryListActivity::class.java)
            activity.putExtra(ProductHistoryListActivity.paramTreeNumber,it.treeNumber)
            activity.putExtra(ProductHistoryListActivity.paramHistoryData,it.woodProducts)
            startActivity(activity)

        }
    }
}

我要使用变量woodProduct时出错,因为类型数据是列表

有人可以帮助我吗?

解决方法

在第一个活动中,向意图投射到ArrayList<out Parcelable>

的列表数据中添加列表数据

例如:

intent.putParcelableArrayListExtra("arrayList",it.woodProducts as 
ArrayList<out Parcelable>)

然后在第二个活动中,同时将数据投射到ArrayList

例如:

    val list =  intent.extras
    val prodList: List<HistoryProduct> = list?.get("arrayList") as ArrayList<HistoryProduct>
,

尝试此解决方案。 首先在ProductHistoryListActivity中创建一个静态变量

companion object {
    var list: MutableList<League> = arrayListOf()
}

然后,当您要初始化意图时,请在开始活动之前执行此操作

ProductHistoryListActivity.list = list
startActivity(activity)

相关问答

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