arraylist - 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
)
解决方案
您的模型是相同的类,因此您可以使用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 list
s 并通过viewType
推荐阅读
- c# - 输入字符串的格式不正确。GenerateEditingElement 组合框数据网格列
- three.js - 地板上的阴影在 three.js v104 中不起作用,但在 r71 中起作用
- algorithm - +1 在硬币找零问题的递归关系中意味着什么(动态规划方法)?
- node.js - 使用 Node 中的单个流将多个输入文件传递给 ffmpeg
- docker - 使用端口暴露映射连接本地主机中的两个 docker 实例
- xslt - BizTalk 映射抑制目标中的空属性
- php - 无法将 phpredis 与 Docker 一起使用。找不到 Redis 类
- netsuite - 如何延长netsuite中第三方URL的响应时间?即,避免大型请求的 SSS_REQUEST_TIME_EXCEEDED
- android - 有没有办法为日历视图中选择的每个日期保存不同的活动实例?
- azure-language-understanding - 删除的话语是否会影响 LUIS 话语配额?