Android ViewPager动态加载数据的实现
2016-08-04 15:45
483 查看
场景:ViewPager里有多个页面,每个页面都有网络请求。
由于ViewPager有预加载性质,所以在第一个页面加载的时候,第二个页面也会进行网络请求,如果有加载进度条的话通常会看到第一个页面数据加载完成后加载进度条还在显示,那是因为第二个页面还在加载数据,常常让人不胜其烦。看了一些大牛的博客发现的是从ViewPager源码入手,或者从adapter里找解决方案,感觉有点复杂,所以在这里我发表下我的拙见及我的解决方法。
通常这种需求是ViewPager与Fragment配合使用,与其他配合也是同理。这里就以Fragment举例。注:由于本人没有贴源码的习惯,只讲个大致思路,所以请各位见谅。
我的方法是将Fragment请求数据统一封装为一个方法,并设置一个布尔类型的变量,这个变量待会儿再说什么作用。然后为你的ViewPager设置一个监听addOnPageChangeListener(),在回调中根据选择的不同页面调用不同页面的数据加载的方法。相信你们也看出来这样处理的话会产生一个问题,就是在每次选择页面的时候都会去重新加载数据,这显然用户体验不好,平白耗费流量。前面所说的布尔类型的变量就派上用场了,在Fragment里设置这个变量用来判断是否加载过这个页面的数据,如果此页面加载过数据那么在选中此页面时就不再加载数据。
ViewPager还有一个销毁机制,有1,2,3,顺序排列的3个页面,当选中第3个页面时,第1个页面会被销毁,就导致了选中第1个页面时还是会重新加载数据,因为第1个页面被销毁后又进行了重新创建。解决的办法是加上,mViewPager.setOffscreenPageLimit(2); ViewPager就不会销毁页面了,流畅度显著提升。
由于ViewPager有预加载性质,所以在第一个页面加载的时候,第二个页面也会进行网络请求,如果有加载进度条的话通常会看到第一个页面数据加载完成后加载进度条还在显示,那是因为第二个页面还在加载数据,常常让人不胜其烦。看了一些大牛的博客发现的是从ViewPager源码入手,或者从adapter里找解决方案,感觉有点复杂,所以在这里我发表下我的拙见及我的解决方法。
通常这种需求是ViewPager与Fragment配合使用,与其他配合也是同理。这里就以Fragment举例。注:由于本人没有贴源码的习惯,只讲个大致思路,所以请各位见谅。
我的方法是将Fragment请求数据统一封装为一个方法,并设置一个布尔类型的变量,这个变量待会儿再说什么作用。然后为你的ViewPager设置一个监听addOnPageChangeListener(),在回调中根据选择的不同页面调用不同页面的数据加载的方法。相信你们也看出来这样处理的话会产生一个问题,就是在每次选择页面的时候都会去重新加载数据,这显然用户体验不好,平白耗费流量。前面所说的布尔类型的变量就派上用场了,在Fragment里设置这个变量用来判断是否加载过这个页面的数据,如果此页面加载过数据那么在选中此页面时就不再加载数据。
ViewPager还有一个销毁机制,有1,2,3,顺序排列的3个页面,当选中第3个页面时,第1个页面会被销毁,就导致了选中第1个页面时还是会重新加载数据,因为第1个页面被销毁后又进行了重新创建。解决的办法是加上,mViewPager.setOffscreenPageLimit(2); ViewPager就不会销毁页面了,流畅度显著提升。
相关文章推荐
- Android应用ViewPager和TabLayout动态加载Fragment,并实现view和tab动态刷新。
- Android ViewPager动态加载数据
- Android中使用ViewPager循环滑屏动态加载数据(仿多看)
- 【Android】 Viewpager+Fragment实现滑动图片的动态加载
- android 中ViewPager动态加载数据的简单demo
- Android viewpager+fragment实现动态加载碎片(fragment重复使用)
- Android ViewPager动态加载数据
- Android ViewPager动态向前向后加载数据,自定义viewPager滑动速度
- Android ViewPager动态加载数据
- Android ViewPager动态加载数据
- Android开发实现的ViewPager引导页功能(动态加载指示器)详解
- Android ViewPager动态加载数据
- android list view 实现动态加载
- Android腾讯微博客户端开发5:利用FootView实现ListView滑动动态加载实现分页
- Android ViewPager实现软件的第一次加载的滑动效果
- [置顶] Android_Loader_使用LoaderManager管理Loader实现异步动态加载数据
- viewPager动态加载listview数据
- Android_Loader_使用LoaderManager管理Loader实现异步动态加载数据
- Android编程心得-使用ActionBar+Fragment+ViewPager实现动态切换Menu效果
- 在ViewPager+Fragment实现Tabhost基础之上实现滑动到当前Fragment加载网络数据