ViewPager的页面的加载和移除
来源:互联网 发布:plc编程培训机构 编辑:程序博客网 时间:2024/06/05 12:08
今天在做轮播图片广告的时候用到了ViewPager,对它滑动时页面的加载和移除探究了下。
在PagerAdapter中存在destroyItem方法和instantiateItem方法,前者用于移除页面,后者用于加载页面。
【注意】如果当前页面是0号页面,那么程序将不会调用instantiateItem方法;同样,如果当前页面时views.size()(ViewPager中加载的view的数量) - 1,也将不会调用instantiateItem方法 。
可以写个简单的ViewPager demo(例如导航页)进行观察,用Logcat打印信息。
(如果你还不会写导航页,请阅读ViewPager实现导航页)
在destroyItem方法中输出的信息:
Log.d("MainActivity", "移除页面 " + position);
在instantiateItem方法输出的信息:
Log.d("MainActivity", "加载页面 " + position);
在onPageSelected输出的信息:
Log.d("MainActivity", "当前选择页面 " + arg0);
那么我把导航页从左滑动到右,从右滑动到左(注意:一共有5页):
信息打印:
03-22 15:22:45.713: D/MainActivity(4835): 加载页面 003-22 15:22:45.713: D/MainActivity(4835): 加载页面 103-22 15:22:48.768: D/MainActivity(4835): 当前选择页面 103-22 15:22:49.408: D/MainActivity(4835): 加载页面 203-22 15:22:51.558: D/MainActivity(4835): 当前选择页面 203-22 15:22:52.198: D/MainActivity(4835): 移除页面 003-22 15:22:52.203: D/MainActivity(4835): 加载页面 303-22 15:22:53.988: D/MainActivity(4835): 当前选择页面 303-22 15:22:54.508: D/MainActivity(4835): 移除页面 103-22 15:22:54.508: D/MainActivity(4835): 加载页面 403-22 15:22:55.578: D/MainActivity(4835): 当前选择页面 403-22 15:22:55.928: D/MainActivity(4835): 移除页面 203-22 15:22:58.958: D/MainActivity(4835): 当前选择页面 303-22 15:22:59.503: D/MainActivity(4835): 加载页面 203-22 15:23:01.288: D/MainActivity(4835): 当前选择页面 203-22 15:23:01.928: D/MainActivity(4835): 加载页面 103-22 15:23:01.928: D/MainActivity(4835): 移除页面 403-22 15:23:02.613: D/MainActivity(4835): 当前选择页面 103-22 15:23:03.243: D/MainActivity(4835): 加载页面 003-22 15:23:03.248: D/MainActivity(4835): 移除页面 303-22 15:23:05.138: D/MainActivity(4835): 当前选择页面 003-22 15:23:05.773: D/MainActivity(4835): 移除页面 2
- 进入程序时
进入程序时,显示加载了要展示的0号页面,然后预加载了1号页面,两次调用了instantiateItem方法。
刚进入自然要调用两次,首先要加载自己的那张图片,然后还要加载下一张图片。
- 滑动到1号页面
这个时候当然是预加载2号页面。
- 滑动到2号页面
移除0号页面,加载3号页面
- 滑动到3号页面
移除1号页面,加载4号页面
- 滑动到4号页面
移除2号页面,不进行预加载了,因为已经到尽头了。
正向拨动完成。
到了这里,大概的规律我们也能看的出来了,
每次滑动都是保留当前页面相邻的两个页面(预加载没有加载的页面,保存已经加载的页面),移除不相邻的但已经加载的那个页面,也就是说每次只有三个页面存在。
反向拨动也是这个道理,反向拨动的示意图就不用画了,这里大家都应该很明白了。
知道了这个滑动的特性之后,我们可以更加灵活地运用ViewPager。
好了,今天先讲了这里,如果有什么不对的地方,欢迎批评指正!
0 0
- ViewPager的页面的加载和移除
- Android的ViewPager中移除Fragment
- 内核模块的加载与移除
- ViewPager简单实用以及如何移除当前的Fragment
- 页面轮换,ViewFlipper 和 ViewPager 的区别
- ViewPager和 Fragment 实现的页面切换
- ViewPager+Fragment 仅加载当前页面的demo
- ViewPager限定预加载的页面个数setOffscreenPageLimit(int limit)
- fragment+viewpager第二次加载页面时显示空白的原因!
- 智慧北京:引导页面ViewPager数据的加载
- ViewPager限定预加载的页面个数setOffscreenPageLimit(int limit)
- ViewPager限定预加载的页面个数setOffscreenPageLimit(int limit)
- 解决Fragment +Viewpager滑动页面重复加载的问题
- ViewPager的动态加载
- ViewPager的懒加载
- ViewPager+Fragment组合的预加载和懒加载
- ViewPager+Fragment组合的预加载和懒加载
- ViewPager+Fragment 组合的预加载和懒加载
- 专注内容,形式次之,立帖为证
- 欢迎使用CSDN-markdown编辑器
- 【USACO3.3.2】商店购物 状态压缩动态规划
- [刷题]Binary Tree Preorder Traversal
- 追逐自己的梦想----------辅助制作第二十四课:寻路call的分析
- ViewPager的页面的加载和移除
- MFC(0)关于MFC中的界面与业务逻辑的分离
- 如何看待 TJ 宣布退出 Node.js 开发,转向 Go?
- 28、传感器
- Java_语法基础_i+++j该如何计算
- Android下Json数据解析
- C++二叉树类实现
- spring中@Component @resource注解的说明
- 现代操作系统应用开发 win8初学