解决ViewPager的addOnPageChangeListener不加载第一个的问题

今天在使用ViewPager的时候发现个问题。

需求如下:

在ViewPager底下放入6个Fragment,每次移动ViewPager的时候更新里面的数据。

需求很简单。

我把每次刷新事件放入Fragment初始化中,发现ViewPager有个预缓存功能,至少会加载周边的一个Fragment。当滑动到周边的时候,会发现Fragment中数据没有变化。

我看了下Viewpager源码,v4包下的Viewpager至少加载周边一个Fragment,此值无法修改。

如继承Viewpager创建新控件,发现还是无法修改DEFAULT_OFFSCREEN_PAGES的作用。

如重新实现Viewpager类,发现有部分v4包下的内部类无法获取。不过网上有博客实现了viewPager的功能的新类。

不过问题又来了,我上边有个标题栏,实现滑动效果,使用的控件为android.support.design.widget.TabLayout 。此控件绑定Viewpager。方法为setupWithViewPager(viewPager)。发现自己写的viewpager无法作为此参数。

如果每次在Fragment初始化时加载数据,同时又在Veiwpager的change事件中再加载,会发现加载2次数据,与需求不符。

为了解决加载两次的这个问题,无意发现一个解决方案。

每个Fragement有各自的一个Tag,我通过此值来分辨不同的Fragment。

在Fragment初始化时,做判断,只当Fragment为第一个时,加载数据。代码如下:

public void onActivityCreated(@Nullable Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);

if(Fragment.TYPE_ONE.equals(fileType)) {

loadInfo(fileType);

}

}

然后在Viewpager界面预加载所有Fragment。代码如下:

viewPager.setOffscreenPageLimit(fragmentList.size());

通过实现viewpager的滑动改变来重新加载数据:

viewPager.addOnPageChangeListener(this);

@Override

public void onPageSelected(int position) {

loadInfo(fileType);

}

测试发现当展现其中的一个Fragment的时候,保证加载一次数据。

你可能感兴趣的:(解决ViewPager的addOnPageChangeListener不加载第一个的问题)