视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ViewPager的页面的加载和移除_html/css
2020-11-27 16:03:11 责编:小采
文档


今天在做轮播图片广告的时候用到了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。

    好了,今天先讲了这里, 如果有什么不对的地方,欢迎批评指正!

    下载本文
    显示全文
    专题