RecyclerViewAdapter,列表在列表内(分组)

时间:2019-06-26 11:47:30

标签: android kotlin android-recyclerview adapter

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

        }
    }
}
}

0 个答案:

没有答案