文章引用自:https://blog.csdn.net/u011002668/article/details/72884893?locationNum=6&fps=1
最近在RecyclerView的Item中使用ViewPager时,发现有个问题,viewpage加载的图片显示不出来。点击一下才会显示出来。
原因:
ViewPager里有一个私有变量mFirstLayout,它是表示是不是第一次显示布局,如果是true,则使用无动画的方式显示当前item,如果是false,则使用动画方式显示当前item。当RecyclerView滚动后,因为RecyclerView的回收机制,ViewPager会走onDetachFromWindow,当再次滚动可见时,ViewPager会走onAttachedToWindow,而问题就出在onAttachToWindow。
@Overrideprotected void onAttachedToWindow() {
super.onAttachedToWindow();
mFirstLayout = true;
}
在onAttachedToWindow中,mFirstLayout被重置为true,所以下一次滚动就没有动画。
解决方法
重写onAttachedToWindow方法,把mFirstLayout再重置成false,因为mFirstLayout是private变量,我们不能直接访问,所以只能反射了。
@Overrideprotected void onAttachedToWindow() {
super.onAttachedToWindow();
try {
Field mFirstLayout = ViewPager.class.getDeclaredField("mFirstLayout");
mFirstLayout.setAccessible(true);
mFirstLayout.set(this, false);
getAdapter().notifyDataSetChanged();
setCurrentItem(getCurrentItem());
} catch (Exception e) {
e.printStackTrace();
}
}
网友评论