viewpager之适配器instantiateItem()和destroyItem()的执行顺序
2016-10-20 10:12
561 查看
最新在整理viewpager,发现一骗很不错的文章,推荐给大家http://blog.csdn.net/harvic880925/article/details/38487149
看了之后发现一个问题instantiateItem和destroyItem的执行顺序没有说明啊,特再次补充
废话不多说了,直接上适配器的代码
而log给我打印的日志是
相信这里你应该明白一些了,如果不明白,没关系,我会解释的
![](http://img.blog.csdn.net/20161020102046013?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
凑合着看吧,我没有屏幕截屏软件,只能这么做了
也就是说,赶紧入viewpager的时候,他会加载第一屏和第二屏,展示第一屏,预加载第二屏,滑动到第二屏的时候,会预加载第三屏而第一屏因为有可能滑动回第一屏,所以不会销毁,而滑动到第三屏,就会销毁第一屏,第二屏不会销毁,同理第四屏也是这样,也就是说viewpager有一个就近原则,自己的左邻右舍我不会管,但是我就是看不惯那些和我隔一个界面的界面,因为我现在被展示出来了,所以一切听我的,我要睡销毁,他就必须销毁,就这样,和展示的界面隔着一个界面的界面只能被销毁了
那么开始的时候他会运行两次instantiateItem,原因就是需要预加载了,下次展示我就不用加载了,用户也不需要等我加载完成才能看到我了,我也不需要让用户等我了,就是这个意思了
看了之后发现一个问题instantiateItem和destroyItem的执行顺序没有说明啊,特再次补充
废话不多说了,直接上适配器的代码
public class ViewPagerAdapter extends PagerAdapter { private List<View> images; private Context context; public ViewPagerAdapter(List<View> images, Context context) { this.images = images; this.context = context; } @Override public int getCount() { return images.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(images.get(position), 0); LogUtil.i("viewpagers", "instantiateItem" + position + ""); return images.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { LogUtil.i("viewpagers", "destroyItem" + position + ""); container.removeView(images.get(position)); }
而log给我打印的日志是
10-20 01:45:06.810 9455-9455/com.demo.neu I/viewpagers: instantiateItem0 10-20 01:45:06.810 9455-9455/com.demo.neu I/viewpagers: instantiateItem1 10-20 01:45:18.226 9455-9455/com.demo.neu I/viewpagers: instantiateItem2 10-20 01:47:13.842 9455-9455/com.demo.neu I/viewpagers: destroyItem0 10-20 01:47:13.842 9455-9455/com.demo.neu I/viewpagers: instantiateItem3 10-20 01:47:21.422 9455-9455/com.demo.neu I/viewpagers: destroyItem1
相信这里你应该明白一些了,如果不明白,没关系,我会解释的
凑合着看吧,我没有屏幕截屏软件,只能这么做了
也就是说,赶紧入viewpager的时候,他会加载第一屏和第二屏,展示第一屏,预加载第二屏,滑动到第二屏的时候,会预加载第三屏而第一屏因为有可能滑动回第一屏,所以不会销毁,而滑动到第三屏,就会销毁第一屏,第二屏不会销毁,同理第四屏也是这样,也就是说viewpager有一个就近原则,自己的左邻右舍我不会管,但是我就是看不惯那些和我隔一个界面的界面,因为我现在被展示出来了,所以一切听我的,我要睡销毁,他就必须销毁,就这样,和展示的界面隔着一个界面的界面只能被销毁了
那么开始的时候他会运行两次instantiateItem,原因就是需要预加载了,下次展示我就不用加载了,用户也不需要等我加载完成才能看到我了,我也不需要让用户等我了,就是这个意思了
相关文章推荐
- ViewPager的setOnPageChangeListener的三个方法的执行顺序
- ViewPager的onPageChangeListener三个方法的执行顺序及细节
- android view中touch的执行顺序
- initWithNibName与viewDidLoad的执行关系以及顺序
- viewController详解-生命周期函数、运行时执行顺序
- Android:ViewPager适配器PagerAdapter的使用
- PagerAdapter的instantiateItem执行次数
- [ tableView deleteRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationRight ]; 执行的顺序
- 解决Fragment中放置ViewPager,不执行adapter的方法
- UITableView + 协议执行顺序
- Android - ViewPager使用PagerAdapter,instantiateItem时出现IndexOutOfBoundsException
- fragment+viewpager 第二次执行时viewpager没有数据
- initWithNibName和viewDidLoad执行顺序
- initWithNibName与viewDidLoad执行顺序
- 关于UIScrollViewDelegate协议中每个回调函数的意义及执行顺序的理解
- viewController 和 tableView 相关方法执行顺序及作用
- ViewPart的主要方法执行顺序
- ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明
- android显示view时各回调函数执行顺序
- 无限循环 动态删除 添加 viewpager适配器