0

서문
RecyclerView에서 다운로드 애니메이션을 구현하고 싶습니다. onBindViewHolderonViewRecycled 이미 다운로드 한 파일의 비율을 검색하는 발표자를 구독하고 수신 거부합니다. 부터 시작 애니메이션 :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

가 호출 onViewRecycled 그래서 onBindViewHolder 이전 ViewHolder를 재활용 원인을 notifyItemChanged 밝혀 ...하지만 다른 인스턴스에. 먼저 onBindViewHoldernew ViewHolder 인스턴스와 함께 호출됩니다. 다음 onViewRecycledold ViewHolder와 함께 호출됩니다.
제 경우에는 문제가 모델의 id에만 의존하고있었습니다. 업데이트에 대해 알리는 데 사용한 Presenter 's View를 명확하게 설명하지 않습니다.