使用RecyclerView + ViewPager 的两个大坑!

文章引用自: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();

    }

}

你可能感兴趣的:(使用RecyclerView + ViewPager 的两个大坑!)