使用RecycleView的多视图-Kotlin(Android)-无法切换检视器

我已经浏览了几天以找到解决问题的方法,但是我很困惑,无法解决问题。我是Android / Kotlin的相对入门者,请耐心等待。

我有下面的数据类,并且从静态源填充了pid值等。

class MyOrderList(var pid:字符串,var名称:字符串,var imageUrl:字符串,var大小:字符串,var描述:字符串,val价格:Int,var count:Int,var itemtotal:Int)

想法基本上是,如果您遍历上面的类列表,则pid通常由数字或特定单词(例如“ LIQUID”)表示。因此,在我的列表中,位置0将显示pid =“ LIQUID”,位置1是一个数字,例如pid = 2。

我想创建一个recyclerview,当它在列表中看到LIQUID为pid时,它将使用viewholder2及其自己的布局。否则,它将使用viewholder1及其自己的布局。

问题是我创建的recyclerview仅显示一个视图持有者。如果位置0 pid为LIQUID,则即使对于列表中具有PID的后续项目,viewholder也为ViewHolder2,不再是LIQUID。简而言之,位置0上的pid将决定整个列表的观看者。

我仍在尝试弄清RecyclerView的曲折,但仍不完全了解。

请参见下面的代码段。

=====================

类MyOrderCart(var myOrder:MutableList,var mymutablelist:MutableList):     RecyclerView.Adapter(){

inner class ViewHolder1(itemView: View) : RecyclerView.ViewHolder(itemView) {

    fun bindView1(mycartlist: MyOrderList){
        itemView.nameView.text = mycartlist.name
        itemView.sizeView.text = "Size: ${mycartlist.size}"

        var iprice = mycartlist.price
        itemView.priceView.text = "Price: $iprice"
        var icount = mycartlist.count
        itemView.countView.text = "Count: $icount"
        var itotal = mycartlist.itemtotal
        itemView.itemtotalView.text = "Subtotal: $itotal"

        var image_checkout = itemView.findViewById(R.id.image_checkout) as ImageView
        var checkout_deletebutton = itemView.findViewById(R.id.checkout_deletebutton) as ImageButton
        var checkout_editcount = itemView.findViewById(R.id.checkout_editcount) as ImageButton
        var mytime = System.currentTimeMillis()

        try {
            Glide.with(image_checkout.getContext()).load(mycartlist.imageUrl)
                .signature(ObjectKey(mytime)).into(image_checkout)
                .clearOnDetach()
        } finally {
            image_checkout.setImageResource(R.drawable.noimage)
        }
    }
}
inner class ViewHolder2(itemView: View) : RecyclerView.ViewHolder(itemView) {
    fun bindView2(mycartlist: MyOrderList){
        itemView.checkout_inside_textview.text = mycartlist.pid
    }
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    var myorderviewtype = myOrder.get(viewType)
        return when (myorderviewtype.pid) {
            "LIQUOR" -> {
                ViewHolder2(
                    LayoutInflater.from(parent.context)
                        .inflate(R.layout.insidecheckout_label, parent, false)
                )
            }
            "NOODLES" -> {
                ViewHolder2(
                    LayoutInflater.from(parent.context)
                        .inflate(R.layout.insidecheckout_label, parent, false)
                )
            }
            else -> {
                ViewHolder1(
                    LayoutInflater.from(parent.context)
                        .inflate(R.layout.layout_insidecheckout, parent, false)
                )
            }
        }
}

override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, position: Int) {
    val gsonRaw = GsonBuilder().create()
    var pos = viewHolder.getAdapterPosition()
    var mycartlist: MyOrderList = myOrder.get(position)
    when (viewHolder) {
        is ViewHolder2 -> {
            val liquorviewHolder = viewHolder as ViewHolder2
            liquorviewHolder.bindView2(mycartlist)
        }
        is ViewHolder1 -> {
            val liquorviewHolder = viewHolder as ViewHolder1
            liquorviewHolder.bindView1(mycartlist)
        }
    }

}