Android RecycleView中多视图类型的多个LiveData对象

Android RecycleView中多视图类型的多个LiveData对象,android,mvvm,android-recyclerview,android-livedata,Android,Mvvm,Android Recyclerview,Android Livedata,我有一个关于RecyclerView适配器的问题。我的列表需要与ViewModel中的多个对象匹配的多视图类型 首先,我有如下ViewModel: class MyViewModel...{ val a = MutableLiveData<A>() val b = MutableLiveData<B>() val c = MutableLiveData<C>() ... } 要应用适配器中更改的数据,请执行以下操作: clas

我有一个关于RecyclerView适配器的问题。我的列表需要与ViewModel中的多个对象匹配的多视图类型

首先,我有如下ViewModel:

class MyViewModel...{
    val a = MutableLiveData<A>()
    val b = MutableLiveData<B>()
    val c = MutableLiveData<C>()
    ...
}
要应用适配器中更改的数据,请执行以下操作:

class MyAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    private var a: A? = null
    private var b: B? = null
    private var c: C? = null

    fun setA(a: A) {
        this.a = a
        notifyItemChanged(0)
    }

    fun setB(b: B) {
        this.b = b
        notifyItemChanged(1)
    }

    fun setC(c: C) {
        this.c = c
        notifyItemChanged(2)
    }

    ....

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        when (viewType) {
            "A" -> MyViewHolderA.create(parent)
            "B" -> MyViewHolderB.create(parent)
            "C" -> MyViewHolderC.create(parent)
            else -> ...
        }
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        when (holder.itemViewType) {
            "A" -> (holder as A).bind(a)
            "B" -> (holder as B).bind(b)
            "C" -> (holder as C).bind(c)
        }
    }
}
classmyadapter:RecyclerView.Adapter(){
私有变量a:a?=null
私有变量b:b?=null
私有变量c:c?=null
有趣的setA(a:a){
这个a=a
notifyItemChanged(0)
}
趣味挫折(b:b){
这个.b=b
通知项已更改(1)
}
有趣的setC(c:c){
这个。c=c
更改项目(2)
}
....
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):RecyclerView.ViewHolder{
何时(视图类型){
“A”->MyViewHolderA.create(父级)
“B”->MyViewHolderB.create(父级)
“C”->MyViewHolderC.create(父级)
否则->。。。
}
}
覆盖onBindViewHolder(holder:RecyclerView.ViewHolder,位置:Int){
何时(holder.itemViewType){
“A”->(持有人为A.bind(A)
“B”->(持有人为B)。绑定(B)
“C”->(持有人为C)。绑定(C)
}
}
}
这似乎是不清晰和干净的代码。但是我找不到任何解决办法来让它更清楚、更干净。 关于MyViewModel中变量a、b和c的问题需要在代码中通知ItemChanged并将模型对象存储在适配器和视图模型中

有没有什么理想的清洁和更干净的这里?
非常感谢您的时间^^

没有足够的详细信息…,您需要显示3行或3种不同类型的列表?@ShlomiFresko。三种类型,即三个差异布局和三个对象模型
class MyAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    private var a: A? = null
    private var b: B? = null
    private var c: C? = null

    fun setA(a: A) {
        this.a = a
        notifyItemChanged(0)
    }

    fun setB(b: B) {
        this.b = b
        notifyItemChanged(1)
    }

    fun setC(c: C) {
        this.c = c
        notifyItemChanged(2)
    }

    ....

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        when (viewType) {
            "A" -> MyViewHolderA.create(parent)
            "B" -> MyViewHolderB.create(parent)
            "C" -> MyViewHolderC.create(parent)
            else -> ...
        }
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        when (holder.itemViewType) {
            "A" -> (holder as A).bind(a)
            "B" -> (holder as B).bind(b)
            "C" -> (holder as C).bind(c)
        }
    }
}