回顾一下这个功能的应用场景:有一个装有很多条数据的一个list,这个list在listview中显示出来了,现在滑动listview随便到一个位置,点击一个item进入数据的详情页,在这个详情页,我们用到了viewpager,让它实现左右滑动的效果。
以前我也是在网上找的demo,大家通常的做法是,一进入详情页,就把每个页面的view初始化出来,然后把这些view放在list里面,传给自己定义的viewpageradapter,这样就出现滑动效果了。但是这样就会出现一个问题,就是我的list太大,初始化出来的view页面就会很多,比如说1000条数据,不可能全初始化出view来放list里再传给adapter吧,这样八成oom的,于是我就照着这个思路,先初始化一部分view,再不断的滑动过程中,再初始化一部分,但是如果你是从数据列表的中间进入,向前滑动时不断的初始化view添加进list,这样viewpageradapter的大小就会发生变化,你的currentindex就在不断的变化。超级不好控制。
再回想一下我们平时做一些常见的adapter的做法,没有在activity中把所有的item初始化出来,再传给adapter,让adapter做显示吧,常用的做法是,在adapter里再进行数据的封装什么的,在adapter中的getview()中进行操作,无论是自定义界面,还是填充数据。其实,viewpager的pageradapter也是同样的思路。回想一下,其实就是基本的adapter的操作了,以前刚学习这个控件的时候被网上别人的demo误导了。
看完上面这段代码是不是很简单,还要注意一点就是,你在外面的listview从哪儿跳进viewpager的时候,要在viewpager设置完adapter的时候setcurretntindex一下,就像下面这样:
1
<code>viewpager.setcurrentitem(intoposition)</code>