RecyclerViewAdapter со списком внутри списка (группировка) - PullRequest
0 голосов
/ 26 июня 2019

(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?) {

        }
    }
}
}
...