您的位置:首页 > 其它

viewpager之适配器instantiateItem()和destroyItem()的执行顺序

2016-10-20 10:12 561 查看
最新在整理viewpager,发现一骗很不错的文章,推荐给大家http://blog.csdn.net/harvic880925/article/details/38487149

看了之后发现一个问题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