/** * @author Benjamin * @description: * @date :2021.11.11 11:10 */class SideBarAdapter(private val itemClick: (LoginResultItem) -> Unit):ListAdapter<LoginResultItem,SideBarAdapter.ViewHolder>( object : DiffUtil.ItemCallback<LoginResultItem>() { override fun areItemsTheSame( oldItem: LoginResultItem, newItem: LoginResultItem ) = oldItem == newItem override fun areContentsTheSame( oldItem: LoginResultItem, newItem: LoginResultItem ) = oldItem == newItem }) { private var currentPos = -1 inner class ViewHolder(binding:SideBarRvItemBinding):RecyclerView.ViewHolder(binding.root){ val root = binding.root private val sideBarName = binding.sideBarName val background = binding.background fun bind(loginResultItem: LoginResultItem){ sideBarName.text = loginResultItem.name } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder( SideBarRvItemBinding.inflate(LayoutInflater.from(parent.context),parent,false) ).apply { background.setOnClickListener { itemClick(getItem(absoluteAdapterPosition)) val temp = currentPos val currentlyPosition = it.tag as Int if (temp != currentlyPosition){ currentPos = currentlyPosition notifyItemChanged(temp) it.isSelected = true } } } override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.bind(getItem(position)) holder.background.apply { isSelected = currentPos == position tag = position } }}