首页 > 解决方案 > 回收商查看物品翻转

问题描述

实际上我正在使用回收器视图并在行中添加布局,并且我在卡片视图上使用翻转动画(单击它时)。问题是当我在回收器中添加多个项目时,翻转动画仅适用于第一个项目。我用 toast 来确保单击功能是否适用于其他项目,结果它可以正常工作但翻转动画不适用于任何其他项目。任何人都可以在这里帮助我

这是我的代码

override fun onCardClick(item: PacketModel, position: Int) {


        val scale = this.resources.displayMetrics.density
        frontCard.cameraDistance= 8000 * scale
        backCard.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(frontCard)
            back_anim.setTarget(backCard)
            front_anim.start()
            back_anim.start()
            isFront = false

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


        }


        Toast.makeText(context, item.Name , 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 packetTime = itemView.findViewById<TextView>(R.id.packetTime)
        val timeMessage = itemView.findViewById<TextView>(R.id.timeMessage)


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

            packetTime.text = item.Name
            timeMessage.text = item.Age

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

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

    }

}

标签: androidkotlinandroid-recyclerview

解决方案


您应该将卡片翻转代码放在您的 recyclerview 适配器中,以便 recyclerview 可以按应有的方式回收它。您可以将卡片翻转代码放在 itemview onClicklistener 中:

 itemView.setOnClickListener {

     // Place your flipping code here

     action.onCardClick(item, adapterPosition)
 }

从 onCardClick 回调中删除翻转代码。让我知道它是否工作正常。


推荐阅读