0

はじめに
私はRecyclerViewでダウンロードアニメーションを実装したいと思います。 onBindViewHolderおよびonViewRecycled私はすでにダウンロードしたファイルのパーセンテージを取得するプレゼンターに登録し、そこから退会します。 私が開始アニメーション:RecyclerViewのベクターアニメーション

java.lang.RuntimeException 
at EventRecyclerViewAdapter.onViewRecycled(EventRecyclerViewAdapter.java:271) 
at android.support.v7.widget.RecyclerView$Recycler.dispatchViewRecycled(RecyclerView.java:6064) 
at android.support.v7.widget.RecyclerView$Recycler.addViewHolderToRecycledViewPool(RecyclerView.java:5835) 
at android.support.v7.widget.RecyclerView$Recycler.recycleViewHolderInternal(RecyclerView.java:5800) 
at android.support.v7.widget.RecyclerView.removeAnimatingView(RecyclerView.java:1305) 
at android.support.v7.widget.RecyclerView$ItemAnimatorRestoreListener.onAnimationFinished(RecyclerView.java:11775) 
at android.support.v7.widget.RecyclerView$ItemAnimator.dispatchAnimationFinished(RecyclerView.java:12275) 
at android.support.v7.widget.SimpleItemAnimator.dispatchChangeFinished(SimpleItemAnimator.java:304) 
at android.support.v7.widget.DefaultItemAnimator$7.onAnimationEnd(DefaultItemAnimator.java:363) 
at android.support.v4.view.ViewPropertyAnimatorCompatJB$1.onAnimationEnd(ViewPropertyAnimatorCompatJB.java:51) 
at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1121) 
at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1149) 
at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1309) 
at android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:146) 
at android.animation.AnimationHandler.-wrap2(AnimationHandler.java) 
at android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:54) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:957) 
at android.view.Choreographer.doCallbacks(Choreographer.java:734) 
at android.view.Choreographer.doFrame(Choreographer.java:667) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:945) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6776) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 

質問
を、それはのように振る舞う理由:はアニメーションがフォローのスタックトレースを終了した直後に呼び出さonViewRecycled 私が持っている

 AnimatedVectorDrawableCompat drawable = AnimatedVectorDrawableCompat.create(context, R.drawable.download_animated); 
     if (drawable != null) { 
      holder.downloadingIcon.setImageDrawable(drawable); 
      drawable.start(); 
     } 

問題どうすれば修正できますか?

答えて

0

それは結局のところ、onBindViewHolder以前ViewHolderをリサイクルさせのでをnotifyItemChangedが呼び出されるonViewRecycled ...しかし、異なるインスタンス上。まずonBindViewHolderが呼び出され、new ViewHolderインスタンスが呼び出されます。次のonViewRecycledは、old ViewHolderで呼び出されます。
私の場合、問題はモデルのidの1つだけに依存していました。私が更新について通知するために使用したPresenterのビューを明白に記述していません。

関連する問題