RecyclerView.ViewHolder.getOldPosition() always return -1

Viewed 101

I'm trying to use ViewHolder.getOldPosition() to animate the removal of RecyclerView items with ItemAnimators.

class MyItemAnimator: SimpleItemAnimator() {

  private val pendingRemovals = ArrayList<RecyclerView.ViewHolder>()

  override fun animateRemove(holder: RecyclerView.ViewHolder): Boolean {
    pendingRemovals.add(holder)
    val dbg = holder.oldPosition // always -1
  }
  
  override fun runPendingAnimations(){
    pendingRemovals.forEach {
      it.itemView.animate().apply {
        translationX(it.itemView.rootView.width.toFloat())
        alpha(0F)
        startDelay = it.oldPosition * 50 // always -1 * 50
      }.start()
    }
  }

}

However, getOldPosition() always return -1, even though the ViewHolder is obviously on the screen. How do you make getOldPosition() return the correct value?

0 Answers
Related