MrBIMC

Untitled

Sep 15th, 2018
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 4.14 KB | None | 0 0
  1. package xyz.fancystuff.fancysearchwidget.common.adapter
  2.  
  3. import android.content.Context
  4. import android.view.LayoutInflater
  5. import android.view.View.GONE
  6. import android.view.View.VISIBLE
  7. import android.view.ViewGroup
  8. import androidx.recyclerview.widget.RecyclerView
  9. import kotlinx.android.synthetic.main.listitem_config_title.view.*
  10. import xyz.fancystuff.fancysearchwidget.R
  11. import xyz.fancystuff.fancysearchwidget.common.model.*
  12. import xyz.fancystuff.fancysearchwidget.common.util.UniversalViewHolder
  13.  
  14. class ConfigListAdapter(val context: Context, var items: List<ConfigItem> = listOf()) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
  15.  
  16.     companion object {
  17.         private const val VIEW_TYPE_TITLE = 0
  18.         private const val VIEW_TYPE_FOOTER = 1
  19.         private const val VIEW_TYPE_CORNERS = 2
  20.         private const val VIEW_TYPE_CLICK_ACTION = 3
  21.         private const val VIEW_TYPE_LIST_HORIZONTAL = 4
  22.         private const val VIEW_TYPE_LIST_VERTICAL = 5
  23.         private const val VIEW_TYPE_WIDGET_SINGULAR = 6
  24.         private const val VIEW_TYPE_WIDGET_LIST = 7
  25.     }
  26.  
  27.     private val recyclerViewPool by lazy { RecyclerView.RecycledViewPool() }
  28.  
  29.     private fun ConfigItem.getViewPool() = when (this) {
  30.         is HorizontalListItem -> recyclerViewPool
  31.         else -> null
  32.     }
  33.  
  34.     override fun getItemCount() = items.size
  35.  
  36.     override fun getItemViewType(position: Int) = when (items[position]) {
  37.         is TitleItem -> VIEW_TYPE_TITLE
  38.         is HorizontalListItem -> VIEW_TYPE_LIST_HORIZONTAL
  39.         is VerticalListItem -> VIEW_TYPE_LIST_VERTICAL
  40.         is CornerRadiusItem -> VIEW_TYPE_CORNERS
  41.         is ClickActionItem -> VIEW_TYPE_CLICK_ACTION
  42.         is WidgetPreviewItem -> VIEW_TYPE_WIDGET_SINGULAR
  43.         is WidgetListPreviewItem -> VIEW_TYPE_WIDGET_LIST
  44.         is FooterItem -> VIEW_TYPE_FOOTER
  45.     }
  46.  
  47.     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder = when (viewType) {
  48.         VIEW_TYPE_LIST_HORIZONTAL -> UniversalViewHolder(
  49.                 LayoutInflater.from(parent.context)
  50.                         .inflate(R.layout.listitem_config_list, parent, false))
  51.         VIEW_TYPE_LIST_VERTICAL -> UniversalViewHolder(
  52.                 LayoutInflater.from(parent.context)
  53.                         .inflate(R.layout.listitem_config_list, parent, false))
  54.         VIEW_TYPE_CORNERS -> UniversalViewHolder(
  55.                 LayoutInflater.from(parent.context)
  56.                         .inflate(R.layout.listitem_config_corners, parent, false))
  57.         VIEW_TYPE_CLICK_ACTION -> UniversalViewHolder(
  58.                 LayoutInflater.from(parent.context)
  59.                         .inflate(R.layout.listitem_config_click_action, parent, false))
  60.         VIEW_TYPE_TITLE -> UniversalViewHolder(
  61.                 LayoutInflater.from(parent.context)
  62.                         .inflate(R.layout.listitem_config_title, parent, false))
  63.         VIEW_TYPE_WIDGET_SINGULAR -> UniversalViewHolder(
  64.                 LayoutInflater.from(parent.context)
  65.                         .inflate(R.layout.listitem_config_widget_preview, parent, false))
  66.         VIEW_TYPE_WIDGET_LIST -> UniversalViewHolder(
  67.                 LayoutInflater.from(parent.context)
  68.                         .inflate(R.layout.listitem_config_list, parent, false))
  69.         else -> UniversalViewHolder(
  70.                 LayoutInflater.from(parent.context)
  71.                         .inflate(R.layout.listitem_config_footer, parent, false))
  72.     }
  73.  
  74.     override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
  75.         val item = items[position]
  76.         when (item) {
  77.             is TitleItem -> with (holder.itemView) {
  78.                 title.setText(item.title)
  79.                 icon.setImageResource(item.icon)
  80.                 actionButton.visibility = if (item.key != null) VISIBLE else GONE
  81.                 actionButton.setOnClickListener {
  82.                     if (position + 1 >= items.size) return@setOnClickListener
  83.                     items[position + 1].adapter?.addItem()
  84.                 }
  85.             }
  86.             else -> items[position].adapter?.onBind(holder.itemView, item, item.getViewPool())
  87.         }
  88.     }
  89.  
  90. }
Advertisement
Add Comment
Please, Sign In to add comment