Skip to content

Instantly share code, notes, and snippets.

@zamahaka
Created October 16, 2019 09:25
Show Gist options
  • Save zamahaka/3b868140070fe561a787adbcd0947c48 to your computer and use it in GitHub Desktop.
Save zamahaka/3b868140070fe561a787adbcd0947c48 to your computer and use it in GitHub Desktop.
package com.deguvino.mobile.deguvino.activity.fragment.menu.exhibition.winelist.adapter
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.deguvino.mobile.deguvino.R
import com.deguvino.mobile.deguvino.activity.fragment.menu.exhibition.winelist.adaptervconfiguration.WineListAdapterViewType
import com.deguvino.mobile.deguvino.activity.fragment.menu.exhibition.winelist.winelistviewholders.WineBodyViewHolder
import com.deguvino.mobile.deguvino.activity.fragment.menu.exhibition.winelist.winelistviewholders.WineHeaderViewHolder
import com.deguvino.mobile.deguvino.activity.fragment.menu.exhibition.winelist.winelistviewholders.WineListViewHolder
import com.deguvino.mobile.deguvino.activity.fragment.menu.exhibition.winelist.winelistviewholders.WineSubHeaderViewHolder
import com.deguvino.mobile.deguvino.activity.fragment.menu.exhibition.winelist.winelistviewmodels.WineBodyViewModel
import com.deguvino.mobile.deguvino.activity.fragment.menu.exhibition.winelist.winelistviewmodels.WineHeaderViewModel
import com.deguvino.mobile.deguvino.activity.fragment.menu.exhibition.winelist.winelistviewmodels.WineSubHeaderViewModel
class WineListAdapter(
private val onHeader: (Int) -> Unit,
private val onWine: (WineBodyViewModel) -> Unit
) : RecyclerView.Adapter<WineListViewHolder>() {
private val wineList = mutableListOf<WineListAdapterViewType>()
fun setData(list: MutableList<WineListAdapterViewType>) {
wineList.clear()
wineList.addAll(list)
notifyDataSetChanged()
}
override fun getItemCount(): Int = wineList.size
override fun getItemViewType(position: Int): Int = wineList[position].viewType
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WineListViewHolder {
val inflater = LayoutInflater.from(parent.context)
return when (viewType) {
WineListAdapterViewType.HEADER -> WineHeaderViewHolder(parent = parent, l = onHeader)
WineListAdapterViewType.SUB_HEADER -> {
val view = inflater.inflate(R.layout.item_wine_list_sub_header, parent, false)
WineSubHeaderViewHolder(view = view)
}
WineListAdapterViewType.BODY -> {
val view = inflater.inflate(R.layout.item_wine_list_body, parent, false)
WineBodyViewHolder(view = view)
}
else -> throw IllegalArgumentException("Wrong ViewType")
}
}
override fun onBindViewHolder(holder: WineListViewHolder, position: Int) = when (holder) {
is WineHeaderViewHolder -> holder.bind(wineList[position] as WineHeaderViewModel)
is WineSubHeaderViewHolder -> holder.bind(wineList[position] as WineSubHeaderViewModel)
is WineBodyViewHolder -> holder.bind(wineList[position] as WineBodyViewModel)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment