(Kotlin-Android) 我有一个数据类
data class ModelGroup(var teams: List<Model>, var groupName: String?)
data class Model(
var cook: Cook?
)
我有一个RecyclerView(gridLayoutManager),每个网格都有一个标题(groupName)。 这些网格是ModelGroups,而这些组来自REST API。 我的适配器收到一个列表。
我也有两个视图持有者(1个用于Header,1个用于Cook)。
问题是如何知道它的标头还是getItemViewType中的cook对象,以及如何绑定列表内部的cook对象。
PS:我不想使用任何库!
class ModelGroupAdapter(
private val context: Context?,
private var modelGroups: List<ModelGroup>
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var selectedItem: Int = -1
companion object {
private const val HEADER_VIEW_TYPE = 0
private const val COOK_VIEW_TYPE = 1
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val headerViewHolder =
HeaderViewholder(LayoutInflater.from(parent.context).inflate(R.layout.item_shield_header, parent, false))
val shieldViewHolder =
CookViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_cook, parent, false))
return when (viewType) {
HEADER_VIEW_TYPE -> headerViewHolder
COOK_VIEW_TYPE -> cookViewHolder
else -> headerViewHolder
}
}
override fun getItemCount(): Int {
var count = 0
for (group in teamGroups) {
count += group.teams.size
}
return count + teamGroups.size
}
override fun getItemViewType(position: Int): Int {
// how to know if its a header or a group.team.cook
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is CookViewHolder) {
context?.let {
holder.bind(
it,
position,
// how to get the current cook object by position?
)
}
} else if (holder is HeaderViewholder) {
context?.let { holder.bind(getHeaderText(position)) }
}
}
inner class HeaderViewholder(view: View) : RecyclerView.ViewHolder(view) {
private val title = view.findViewById<TextView>(R.id.item_shield_header_title)
fun bind(groupName: String) {
title.text = groupName
}
}
inner class CookViewHolder(view: View) : RecyclerView.ViewHolder(view) {
private val image = view.findViewById<ImageView>(R.id.image_cook)
fun bind(context: Context, position: Int, cook: Cook?) {
}
}
}
}