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

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

看了之后发现一个问题instantiateItem和destroyItem的执行顺序没有说明啊,特再次补充

废话不多说了,直接上适配器的代码

public class ViewPagerAdapter extends PagerAdapter {

    private List images;
    private Context context;

    public ViewPagerAdapter(List 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之适配器instantiateItem()和destroyItem()的执行顺序_第1张图片
凑合着看吧,我没有屏幕截屏软件,只能这么做了

也就是说,赶紧入viewpager的时候,他会加载第一屏和第二屏,展示第一屏,预加载第二屏,滑动到第二屏的时候,会预加载第三屏而第一屏因为有可能滑动回第一屏,所以不会销毁,而滑动到第三屏,就会销毁第一屏,第二屏不会销毁,同理第四屏也是这样,也就是说viewpager有一个就近原则,自己的左邻右舍我不会管,但是我就是看不惯那些和我隔一个界面的界面,因为我现在被展示出来了,所以一切听我的,我要睡销毁,他就必须销毁,就这样,和展示的界面隔着一个界面的界面只能被销毁了

那么开始的时候他会运行两次instantiateItem,原因就是需要预加载了,下次展示我就不用加载了,用户也不需要等我加载完成才能看到我了,我也不需要让用户等我了,就是这个意思了




你可能感兴趣的:(viewpager之适配器instantiateItem()和destroyItem()的执行顺序)