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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值