在工作中遇到了在一些复杂的场景下,androidx下的ViewPager在调用setCurrentItem时翻页动画失效,令人很是无语,并且第一次失效,再后来就又有了动画,如果你不仔细看,都不会发现会有这个问题,对于有强迫着症追求完美主义的我怎么能放过这个BUG呢,结合demo详细分析一下。
在demo中,营造场景尽量复杂,在RecyclerView中嵌入ViewPager,并且在华东过程中让ViewPager所在视图被回收再滑回来进入页面,此时翻页失效,请看demo。
在demo中,RecyclerView添加头部内容为ViewPager,其他以Button形式展示:
此时在向下滑动的过程中再次展示Viewpager时,点击按钮时,ViewPager的页面切换丢失了动画,直接切页了。
那么原因是什么呢?我们知道在RecyclerView滑动的过程中ViewPager是被回收了,再次展示是又重新被拿了出来,对于ViewPager来说最起码是重新走了onDetachedFromWindow 和onAttachedToWindow两个方法,那么我们跟随源码进去看看到底是怎么回事。
可以看出在ViewPager调用onAttachedToWindow时只是将成员变量mIsF