SectionAdapter.kt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package com.bearya.kids.section
  2. import android.text.TextUtils
  3. import android.view.LayoutInflater
  4. import android.view.View
  5. import android.view.ViewGroup
  6. import androidx.core.content.res.ResourcesCompat
  7. import androidx.databinding.DataBindingUtil
  8. import androidx.paging.PagedListAdapter
  9. import androidx.recyclerview.widget.DiffUtil
  10. import androidx.recyclerview.widget.RecyclerView
  11. import com.bearya.data.entity.Section
  12. import com.bearya.kids.R
  13. import com.bearya.kids.databinding.ItemSectionBinding
  14. import com.bearya.kids.databinding.ItemSectionPreviewBinding
  15. import library.OnItemClickListener
  16. import library.ext.assetsPath
  17. class SectionPagerAdapter :
  18. PagedListAdapter<Section, SectionPagerViewHolder>(object : DiffUtil.ItemCallback<Section>() {
  19. override fun areItemsTheSame(oldItem: Section, newItem: Section): Boolean =
  20. oldItem.id == newItem.id
  21. override fun areContentsTheSame(oldItem: Section, newItem: Section): Boolean =
  22. TextUtils.equals(oldItem.name, newItem.name) && oldItem.lock == newItem.lock
  23. }) {
  24. var onItemClickListener: OnItemClickListener<Section>? = null
  25. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SectionPagerViewHolder =
  26. SectionPagerViewHolder(
  27. ItemSectionBinding.inflate(LayoutInflater.from(parent.context), parent, false).root
  28. )
  29. override fun onBindViewHolder(holder: SectionPagerViewHolder, position: Int) {
  30. val item = getItem(position)
  31. holder.bindView?.image = "chapter/${item?.name}/resources/${position + 1}.webp".assetsPath()
  32. holder.itemView.setOnClickListener { onItemClickListener?.invoke(it, item, position) }
  33. }
  34. fun getItemData(position: Int) = getItem(position)
  35. }
  36. class SectionPagerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
  37. val bindView: ItemSectionBinding? = DataBindingUtil.bind(itemView)
  38. }
  39. class SectionPreviewAdapter :
  40. PagedListAdapter<Section, SectionPreviewViewHolder>(object : DiffUtil.ItemCallback<Section>() {
  41. override fun areItemsTheSame(oldItem: Section, newItem: Section): Boolean =
  42. oldItem.id == newItem.id
  43. override fun areContentsTheSame(oldItem: Section, newItem: Section): Boolean =
  44. TextUtils.equals(oldItem.name, newItem.name) && oldItem.lock == newItem.lock
  45. }) {
  46. var onItemClickListener: OnItemClickListener<Section>? = null
  47. private var currentFocusItemIndex = 0
  48. private var recyclerView: RecyclerView? = null
  49. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SectionPreviewViewHolder =
  50. SectionPreviewViewHolder(
  51. ItemSectionPreviewBinding.inflate(LayoutInflater.from(parent.context), parent, false).root
  52. )
  53. override fun onBindViewHolder(holder: SectionPreviewViewHolder, position: Int) {
  54. val item = getItem(position)
  55. val index = position + 1
  56. holder.bindView?.index = "$index"
  57. holder.bindView?.image = "chapter/${item?.name}/resources/$index.webp".assetsPath()
  58. holder.bindView?.cover?.setBorderColor(
  59. ResourcesCompat.getColor(
  60. holder.itemView.context.resources,
  61. if (position == currentFocusItemIndex) R.color.colorBlue else R.color.colorWhite,
  62. null
  63. )
  64. )
  65. holder.itemView.setOnClickListener { v -> onItemClickListener?.invoke(v, item, position) }
  66. }
  67. fun setSelectedIndex(position: Int) {
  68. notifyItemChanged(currentFocusItemIndex)
  69. currentFocusItemIndex = position
  70. notifyItemChanged(currentFocusItemIndex)
  71. recyclerView?.smoothScrollToPosition(currentFocusItemIndex)
  72. }
  73. override fun onAttachedToRecyclerView(rv: RecyclerView) {
  74. super.onAttachedToRecyclerView(rv)
  75. recyclerView = rv
  76. }
  77. override fun onDetachedFromRecyclerView(rv: RecyclerView) {
  78. super.onDetachedFromRecyclerView(rv)
  79. recyclerView = null
  80. }
  81. }
  82. class SectionPreviewViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
  83. val bindView: ItemSectionPreviewBinding? = DataBindingUtil.bind(itemView)
  84. }