解决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的时候,保证加载一次数据。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容