Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to click a button inside a recyclerview item in kotlin

I am putting a button inside my recycler view item, but I am not able to perform any action on clicking that button, I know how to click a recyclerview item but I don't know how to click specific element of item in recycler view

This function is used to click recycler view item override fun onCardClick(item: PacketModel, position: Int) {

        lateinit var front_anim: AnimatorSet
        lateinit var back_anim: AnimatorSet


        val scale = this.resources.displayMetrics.density
        packetRecView.cameraDistance = 8000 * scale
        packetRecView.cameraDistance = 8000 * scale





        front_anim =
            AnimatorInflater.loadAnimator(context, R.animator.front_animator) as AnimatorSet
        back_anim = AnimatorInflater.loadAnimator(context, R.animator.back_animator) as AnimatorSet

        if (isFront) {
            front_anim.setTarget(flip.cardOnFront)
            back_anim.setTarget(flip.backCard)
            front_anim.start()
            back_anim.start()
            isFront = false

        } else {
            front_anim.setTarget(flip.backCard)
            back_anim.setTarget(flip.cardOnFront)
            back_anim.start()
            front_anim.start()
            isFront = true


        }




        Toast.makeText(context, item.drugs, Toast.LENGTH_SHORT).show()
    }

This is my Adapter

class PacketAdapter (val packetList: ArrayList<PacketModel> , var clickListener2: onPacketItemClickListener): RecyclerView.Adapter<PacketAdapter.ViewHolder>(){


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {

        val a = LayoutInflater.from(parent?.context).inflate(R.layout.packet, parent, false)




        return ViewHolder(a)


    }

    override fun getItemCount(): Int {


        return packetList.size

    }

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

        val packet : PacketModel = packetList[position]

        holder.intialize(packet, clickListener2)


    }


    class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView)
    {

     //   val takenButton = itemView.findViewById<Button>(R.id.taken)

        val fCard = itemView.findViewById<CardView>(R.id.cardOnFront)
        val packetTime = itemView.findViewById<TextView>(R.id.timeofPacket)
        val timeMessage = itemView.findViewById<TextView>(R.id.messageofTime)
        val bCars = itemView.findViewById<CardView>(R.id.backCard)
        val drugs = itemView.findViewById<TextView>(R.id.drugs)
        val note = itemView.findViewById<TextView>(R.id.note)
        val dosage = itemView.findViewById<TextView>(R.id.dosage)






        fun intialize(item: PacketModel, action: onPacketItemClickListener){




//            val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ", Locale.getDefault())
//            formatter.timeZone = TimeZone.getTimeZone("UTC")
//            val result = formatter.parse(dateAsString)
//
//
//



//            takenButton.setOnClickListener(this)


            var date = (((item.date) as Timestamp).seconds) * 1000L
            fun convertLongToTime(time: Long): String {
                val date = Date(time)
                val format = SimpleDateFormat("yyyy.MM.dd HH:mm")
                format.timeZone = TimeZone.getTimeZone("GMT+5")

                return format.format(date)
            }
            var convertedDate = convertLongToTime(date)
            packetTime.text = convertedDate
            timeMessage.text = ""
            drugs.text = item.drugs
            note.text  = item.notes
            dosage.text = item.dosage

            itemView.setOnClickListener {
                action.onCardClick(item, adapterPosition)
            }



        }
    }




    interface onPacketItemClickListener{
        fun onCardClick (item: PacketModel, position: Int)
    }


}

Now I want to perform click action inside the recyclerview item. Please Help

like image 941
Tameem Avatar asked Oct 17 '25 16:10

Tameem


1 Answers

From your code suppose your desired button is myButton and you define it to your adapter like:

    val myButton = itemView.findViewById<Button>(R.id.myButton) // This is your Button, you declared in your xml file.
    val fCard = itemView.findViewById<CardView>(R.id.cardOnFront)
    val packetTime = itemView.findViewById<TextView>(R.id.timeofPacket)
    val timeMessage = itemView.findViewById<TextView>(R.id.messageofTime)
    val bCars = itemView.findViewById<CardView>(R.id.backCard)
    val drugs = itemView.findViewById<TextView>(R.id.drugs)
    val note = itemView.findViewById<TextView>(R.id.note)
    val dosage = itemView.findViewById<TextView>(R.id.dosage)

Then just simply call myButton.setOnClickListener inside your initialize function in your adapter like:

    fun intialize(item: PacketModel, action: onPacketItemClickListener) {
        var date = (((item.date) as Timestamp).seconds) * 1000L
        fun convertLongToTime(time: Long): String {
            val date = Date(time)
            val format = SimpleDateFormat("yyyy.MM.dd HH:mm")
            format.timeZone = TimeZone.getTimeZone("GMT+5")

            return format.format(date)
        }
        var convertedDate = convertLongToTime(date)
        packetTime.text = convertedDate
        timeMessage.text = ""
        drugs.text = item.drugs
        note.text  = item.notes
        dosage.text = item.dosage

        itemView.setOnClickListener {
            action.onCardClick(item, adapterPosition)
        }

        myButton.setOnClickListener {
            // Do whatever you want on your button click as like you did to your recycler-view item click 
            //action.onCardClick(item, adapterPosition)
        }
    }
like image 134
Md. Yamin Mollah Avatar answered Oct 20 '25 18:10

Md. Yamin Mollah



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!