Recycler View Item flip

社会主义新天地 提交于 2020-04-18 01:21:54

问题


Actually I am using recycler view and adding a layout in the rows and I am using flip animation on cardviews(when clicked on it). The problem is when I add multiple items in the recycler the flip animation works only with the first item. I used toast to make sure that click function is working with other items or not, turns out it's working but flip animation is not working with any other items.Can any one help me out here

This is my code

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

}

This is the adapter Class

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)

    }

}

回答1:


You should place your card flipping code inside your recyclerview adapter so that recyclerview can recycle it as it should be. You can place your card flipping code inside itemview onClicklistener:

 itemView.setOnClickListener {

     // Place your flipping code here

     action.onCardClick(item, adapterPosition)
 }

Remove flipping code from onCardClick callback. Let me know if it works fine.



来源:https://stackoverflow.com/questions/61017338/recycler-view-item-flip

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!