1. /**
    2. * @author Benjamin
    3. * @description:
    4. * @date :2021.11.11 11:10
    5. */
    6. class SideBarAdapter(private val itemClick: (LoginResultItem) -> Unit):ListAdapter<LoginResultItem,SideBarAdapter.ViewHolder>(
    7. object : DiffUtil.ItemCallback<LoginResultItem>() {
    8. override fun areItemsTheSame(
    9. oldItem: LoginResultItem,
    10. newItem: LoginResultItem
    11. ) =
    12. oldItem == newItem
    13. override fun areContentsTheSame(
    14. oldItem: LoginResultItem,
    15. newItem: LoginResultItem
    16. ) =
    17. oldItem == newItem
    18. }
    19. ) {
    20. private var currentPos = -1
    21. inner class ViewHolder(binding:SideBarRvItemBinding):RecyclerView.ViewHolder(binding.root){
    22. val root = binding.root
    23. private val sideBarName = binding.sideBarName
    24. val background = binding.background
    25. fun bind(loginResultItem: LoginResultItem){
    26. sideBarName.text = loginResultItem.name
    27. }
    28. }
    29. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
    30. SideBarRvItemBinding.inflate(LayoutInflater.from(parent.context),parent,false)
    31. ).apply {
    32. background.setOnClickListener {
    33. itemClick(getItem(absoluteAdapterPosition))
    34. val temp = currentPos
    35. val currentlyPosition = it.tag as Int
    36. if (temp != currentlyPosition){
    37. currentPos = currentlyPosition
    38. notifyItemChanged(temp)
    39. it.isSelected = true
    40. }
    41. }
    42. }
    43. override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    44. holder.bind(getItem(position))
    45. holder.background.apply {
    46. isSelected = currentPos == position
    47. tag = position
    48. }
    49. }
    50. }