首页 > 解决方案 > RecyclerView 中的两个arrayList

问题描述

如何在同一个回收视图中显示两个 arrayList。使用 resultado 变量调试是正确的。如何让结果变量在 RecyclerView 中显示?

在我的活动DetPartido 中

val resultado = (response.body()!!.golesLocal)!! + (response.body()!!.golesVisitante)!!
Rv_DetLocal.adapter = DetLocalAdapter(resultado!!)

我的适配器:

    class DetLocalAdapter(val det_partido: List<Any>): RecyclerView.Adapter<DetLocalAdapter.DetallesViewHolder>() {

    private var context: Context? = null

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DetallesViewHolder {
        val layoutInflate = LayoutInflater.from(parent.context)
            .inflate(R.layout.partido_goles_row, parent, false)
        context = parent.context

        return DetLocalAdapter.DetallesViewHolder(layoutInflate)
    }

    override fun onBindViewHolder(holder: DetallesViewHolder, position: Int) {
        val itemDetPart = det_partido[position]
        holder.bindTiempo(itemDetPart)

        holder.itemView.setOnClickListener{

            val bundle = Bundle()
            bundle.putString(Constants.ID_JUG, itemDetPart.idJugador)
            context!!.startActivity(Intent(context, DetPlantilla::class.java).putExtras(bundle))
        }
    }

    override fun getItemCount(): Int {
        return det_partido.size
    }

    class DetallesViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
        fun bindTiempo(plantillaModel2: DetLocalModel){


            itemView.tv_JugadorLocal.text = plantillaModel2.nombreLocal + "\n Minuto: " + plantillaModel2.minutoLocal

            Picasso.get()
                .load("https://ffcv.es/ncompeticiones/img/jugadores/" + plantillaModel2.idJugador + ".jpeg")
                .fit()
                .into(itemView.civ_jugadorLocal)
        }
    }
}

我的模型中的数组是 DetPartModel1:

    class DetPartModel1{   

    var golesLocal: ArrayList<DetLocalModel>? = null
    var golesVisitante: ArrayList<DetVisiModel>? = null    
}

我的模型是golesLocal:

    class DetLocalModel (
    val idJugador: String,

    @SerializedName("nombre")
    val nombreLocal: String,

    @SerializedName("minuto")
    val minutoLocal: String
)

他们是golesVisitante的我的模型:

class DetVisiModel (
    val idJugador: String,

    @SerializedName("nombre")
    val nombreVisi: String,

    @SerializedName("minuto")
    val minutoVisi: String
)

标签: arraylistkotlinretrofit2android-recyclerview

解决方案


您的模型是相同的类,因此您可以使用sealed或仅使用继承来区分它们。

sealed class ModelParent(
        val idJugador: String,

        @SerializedName("nombre")
        val nombreLocal: String,

        @SerializedName("minuto")
        val minutoLocal: String
)

class DetLocalModel(id : String, number: String, minute: String)
    : ModelParent(id,number,minute)


class DetVisiModel(id : String, number: String, minute: String)
    : ModelParent(id,number,minute)



class DetPartModel1{

    var golesLocal: List<ModelParent> = mutableListOf<DetLocalModel>()
    var golesVisitante: List<ModelParent> = mutableListOf<DetVisiModel>()
}

这是如何将它们添加到适配器

创建你的模型:

val model:DetPartModel1 = DetPartModel1(); //todo fill correct data

在模型中正确填充数据

将完整列表添加到您的适配器

Rv_DetLocal.adapter = DetLocalAdapter(mutableListOf<ModelParent>().apply {
    addAll(model.golesLocal)
    addAll(model.golesVisitante)
})

这是您的适配器的外观。

class DetLocalAdapter(val items: List<ModelParent>): RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        //todo
    }

    override fun getItemCount(): Int {
        items.size
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        val item = items.get(position)
        when(item) {
            is DetVisiModel ->holder.bindDetVisiModel()
            is DetLocalModel ->holder.bindDetLocalModel()
        }
    }
}

这是快速解决方案,更好的方法是使用 2 ViewHolder, 2 lists 并通过viewType


推荐阅读