(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 для заголовка, 1 для Cook).
Проблема заключается в том, как узнать, является ли его заголовок или объект cook в getItemViewType икак связать объект 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?) {
}
}
}
}