Monday, 6 September 2021

How to highlight and auto perform click on recently added item in RecyclerView

I have two scenario so first one is I want to highlight and auto perform click on only recently added item in RecyclerView and second one is if user select or click on any of the item that time also that should be highlighted and clickable so this second scenario I have already implemented but I don't know how to highlight and do auto perform click on last added item on the list.

MyAdapterClass

class CarItemAdapter(
        private val activity: MainActivity,
        private val carList: ArrayList<MyEntity>,
        private val myViewModel: MyViewModel,
        private val settings: Settings
) :
        RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    var listener: OnItemsClickListener? = null
    var rowIndex = 0

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val layoutInflater = LayoutInflater.from(parent.context)
        return when (viewType) {
            VIEW_TYPE_ADDITEM -> ViewHolderAddCarItem(SettingsCarAddItemTileBinding.inflate(layoutInflater, parent, false))
            VIEW_TYPE_ITEM -> ViewHolderCarItem(SettingsCarItemTileBinding.inflate(layoutInflater, parent, false))
            else -> throw IllegalArgumentException("Invalid view type")
        }
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

        when (holder) {
            is ViewHolderCarItem -> holder.bind(carList[position -1], position-1)
            is ViewHolderAddCarItem -> holder.bind()
        }
    }

    inner class ViewHolderAddCarItem internal constructor(private var binding: SettingsCarAddItemTileBinding) : RecyclerView.ViewHolder(binding.root) {
        fun bind() {
            binding.lifecycleOwner = activity
            binding.handler = EventHandler()
            binding.userSpecificCarSubtitle.setText(R.string.user_specific_car_subtitle)
        }

        inner class EventHandler {
            fun onItemClicked() {
                activity.showSubPage(AddVehiclePage(activity), true)
            }
        }
    }

    inner class ViewHolderCarItem internal constructor(private var binding: SettingsCarItemTileBinding) : RecyclerView.ViewHolder(binding.root) {
        fun bind(myEntity: MyEntity, position: Int) {

            binding.lifecycleOwner = activity
            val bmp = BitmapFactory.decodeByteArray(myEntity.image, 0, Objects.requireNonNull<ByteArray>(myEntity.image).size)
            binding.carImage.setImageBitmap(bmp)
            binding.carName.text = myEntity.label

            binding.layoutCar.setOnClickListener {
                listener?.onItemClick(myEntity)
                settings.carNumber = myEntity.carNumber
                settings.selectedCarType = activity.getString(R.string.settings_category_view_sub_title_for_user_specific_car)
                settings.isCarSelected = true
                rowIndex = position
                notifyDataSetChanged()
            }

            binding.deleteButton.setOnClickListener {
                GlobalScope.launch(Dispatchers.IO) { bbdCarViewModel.deleteByFinNumber(myEntity.carNumber) }
                settings.isBBDCarSelected = false
                carList.removeAt(position)
                notifyDataSetChanged()
            }

            if (rowIndex == position) {
                binding.layoutCar.setBackgroundColor(activity.getColor(R.color.petrol))
                binding.carName.setTextColor(activity.getColor(R.color.white))
            } else {
                binding.layoutCar.setBackgroundColor(activity.getColor(R.color.coolGray))
                binding.carName.setTextColor(activity.getColor(R.color.coolGray_80k))
            }
        }
    }

    override fun getItemViewType(position: Int): Int {
        return if (position == 0 && position <= carList.size) {
            VIEW_TYPE_ADDITEM
        } else VIEW_TYPE_ITEM
    }

    override fun getItemCount(): Int {
        return carList.size + 1
    }

    interface OnItemsClickListener {
        fun onItemClick(myEntity: MyEntity)
    }

    fun setWhenClickListener(listener: OnItemsClickListener) {
        this.listener = listener
    }

    companion object {
        const val VIEW_TYPE_ITEM = 0
        const val VIEW_TYPE_ADDITEM = 1
    }
}

Please help me



from How to highlight and auto perform click on recently added item in RecyclerView

No comments:

Post a Comment