我有几个Fragment,其中一个Fragment里面有一个listview。这个Fragment里面的onCreateView里面对listview进行布局,就是说listview每次onCreateView被执行的时候都重新New一次,listview的Adapter也在onCreateView每次都重新New一次。
我把listview的ITEM滚动到某个位置(比如是第五条ITEM处于listview的最上面),然后在其他Fragment来回切换,大家都知道,这种时候,listview所在的Fragment里面的onCreateView是要被执行的,也就是说,我的listview被重新布局,然后,Adapter也重新New了。那么按理说,这时我再回到listview所在的Fragment的时候,此时的listview已经不可能再处于以前滚动后的ITEM的位置了吧(因为listview已经是重新New过的了)。
但神奇的是,居然listview还是完好的停留在以前滚动后的ITEM的位置(第五条ITEM处于listview的最上面)。
太神奇了,listview已经被New过了啊,它已经不是以前的listviwew了啊,此时,应该是第一条ITEM处于listview的最上面啊!为什么还是第五条ITEM处于listview的最上面啊?
难道Fragment有记忆listview状态的神奇功能???实在想不清楚了。。。。。请诸位老师指教!
能不能展开说说什么叫在其他Fragment来回切换
littlejade1214 老师,比如说我共有3个Fragment(就是在一个tablayout共有3个选项卡,每个选项卡对应1个Fragment),listview所在Fragment是第1个,另外还有另外2个Fragment.
我在第1个Fragment里,把listview的状态滚动为第五条ITEM处于listview的最上面。然后在来回点击另外tablayout的另外两个选项卡(也就是相当于在另外2个Fragment之间来回切换。这时侯第1个Fragment里的onCreateView是要被执行的,于是listview也被重新New)。
我百思不得其解的就是被重新New过的listview为什么还能完好的保持New以前的状态(第五条ITEM处于listview的最上面)。
有类似程序的老师们可以看一下,不管Fragment怎么切换,listview总是保持切换前的状态
有点错别字:是然后再来回点击tablayout的另外两个选项卡
想了一下午,有点明白了,暂且汇报一下。
listview和Adapter无疑是New过了,跟踪了多次,这点确认无疑。就是说listview和它所用的数据都已经是新的了,和以前已经无关了。
那么为什么能保持以前的位置(第五条ITEM处于listview的最上面)不变呢。应该是Adapter的父类BaseAdapter(或者是BaseAdapter的父类)里有个position的静态成员,
所以,这个静态成员变量记忆住了以前的位置。Adapter再次New的时候,这个静态成员变量里还是保存着以前的位置(第五条ITEM处于listview的最上面)。
应该是这个原因。java和安卓环境都不太熟,不太会进一步跟踪到封装好的父类里面了。但根据分析,只可能是这个原因了。
如有不对,请指教。
请问你是配合ViewPager来做的吗,如果ViewPager用的FragmentPagerAdapter适配器,在来回切换时根本就不会销毁Fragment,
也就不会重新创建Fragment,那么你的ListView和它的适配器都不会重新创建。