Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package xyz.fancystuff.fancysearchwidget.common.adapter
- import android.content.Context
- import android.view.LayoutInflater
- import android.view.View.GONE
- import android.view.View.VISIBLE
- import android.view.ViewGroup
- import androidx.recyclerview.widget.RecyclerView
- import kotlinx.android.synthetic.main.listitem_config_title.view.*
- import xyz.fancystuff.fancysearchwidget.R
- import xyz.fancystuff.fancysearchwidget.common.model.*
- import xyz.fancystuff.fancysearchwidget.common.util.UniversalViewHolder
- class ConfigListAdapter(val context: Context, var items: List<ConfigItem> = listOf()) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
- companion object {
- private const val VIEW_TYPE_TITLE = 0
- private const val VIEW_TYPE_FOOTER = 1
- private const val VIEW_TYPE_CORNERS = 2
- private const val VIEW_TYPE_CLICK_ACTION = 3
- private const val VIEW_TYPE_LIST_HORIZONTAL = 4
- private const val VIEW_TYPE_LIST_VERTICAL = 5
- private const val VIEW_TYPE_WIDGET_SINGULAR = 6
- private const val VIEW_TYPE_WIDGET_LIST = 7
- }
- private val recyclerViewPool by lazy { RecyclerView.RecycledViewPool() }
- private fun ConfigItem.getViewPool() = when (this) {
- is HorizontalListItem -> recyclerViewPool
- else -> null
- }
- override fun getItemCount() = items.size
- override fun getItemViewType(position: Int) = when (items[position]) {
- is TitleItem -> VIEW_TYPE_TITLE
- is HorizontalListItem -> VIEW_TYPE_LIST_HORIZONTAL
- is VerticalListItem -> VIEW_TYPE_LIST_VERTICAL
- is CornerRadiusItem -> VIEW_TYPE_CORNERS
- is ClickActionItem -> VIEW_TYPE_CLICK_ACTION
- is WidgetPreviewItem -> VIEW_TYPE_WIDGET_SINGULAR
- is WidgetListPreviewItem -> VIEW_TYPE_WIDGET_LIST
- is FooterItem -> VIEW_TYPE_FOOTER
- }
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder = when (viewType) {
- VIEW_TYPE_LIST_HORIZONTAL -> UniversalViewHolder(
- LayoutInflater.from(parent.context)
- .inflate(R.layout.listitem_config_list, parent, false))
- VIEW_TYPE_LIST_VERTICAL -> UniversalViewHolder(
- LayoutInflater.from(parent.context)
- .inflate(R.layout.listitem_config_list, parent, false))
- VIEW_TYPE_CORNERS -> UniversalViewHolder(
- LayoutInflater.from(parent.context)
- .inflate(R.layout.listitem_config_corners, parent, false))
- VIEW_TYPE_CLICK_ACTION -> UniversalViewHolder(
- LayoutInflater.from(parent.context)
- .inflate(R.layout.listitem_config_click_action, parent, false))
- VIEW_TYPE_TITLE -> UniversalViewHolder(
- LayoutInflater.from(parent.context)
- .inflate(R.layout.listitem_config_title, parent, false))
- VIEW_TYPE_WIDGET_SINGULAR -> UniversalViewHolder(
- LayoutInflater.from(parent.context)
- .inflate(R.layout.listitem_config_widget_preview, parent, false))
- VIEW_TYPE_WIDGET_LIST -> UniversalViewHolder(
- LayoutInflater.from(parent.context)
- .inflate(R.layout.listitem_config_list, parent, false))
- else -> UniversalViewHolder(
- LayoutInflater.from(parent.context)
- .inflate(R.layout.listitem_config_footer, parent, false))
- }
- override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
- val item = items[position]
- when (item) {
- is TitleItem -> with (holder.itemView) {
- title.setText(item.title)
- icon.setImageResource(item.icon)
- actionButton.visibility = if (item.key != null) VISIBLE else GONE
- actionButton.setOnClickListener {
- if (position + 1 >= items.size) return@setOnClickListener
- items[position + 1].adapter?.addItem()
- }
- }
- else -> items[position].adapter?.onBind(holder.itemView, item, item.getViewPool())
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment