Как щелкнуть кнопку внутри пункта просмотра маклера в kotlin - PullRequest
0 голосов
/ 06 апреля 2020

Я помещаю кнопку в свой элемент просмотра переработчика, но я не могу выполнить какое-либо действие при нажатии на эту кнопку, я знаю, как щелкнуть элемент просмотра переработчика, но я не знаю, как щелкнуть указанный элемент c элемента в представлении рециркулятора

Эта функция используется для щелчка мышью на элементе представления рециркулятора, который переопределяет забаву 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()
    }

Это мой адаптер

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)
    }


}

Теперь я хочу выполнить действие щелчка внутри элемента в окне повторного просмотра. Пожалуйста, помогите

1 Ответ

1 голос
/ 06 апреля 2020

Предположим, что из вашего кода установлена ​​нужная кнопка myButton, и вы определяете ее для своего адаптера следующим образом:

    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)

Затем просто вызовите myButton.setOnClickListener внутри функции initialize в своем адаптере, например:

    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)
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...