ListView自己回滚到最顶端的问题

今天QA报来一个Bug,说是联系人界面的ListView在从其他界面返回后自动滚到顶端了,而要求是要保持在原来的位置。

原先这个界面是自动保持了位置的(没有代码来设置这个),不知道什么时候就老是刷的滚动最顶端了。看了下代码木有找到问题,原先的代码不也是这样的嘛。我又没改。郁闷了,最近点好背,前面遇到个crash到现在也没找到原因的,好不容易组织次游泳就突然下暴雨的。。。%%&*^&$#@$

最后发现时这次给ListView加了Header所致。

getListView().addHeaderView(mSearchBar);

特意扒出以前的代码,验证了一下,确实如此。可是也不能不加Header,要求的。咋回事呢?

比较了这个界面跟其它界面的不同,就是当切换Tab页时会先关掉当前的Cursor,在onStop的时候也会调用mAdapter.changeCursor(null);.

如果没有Header,这样List还是能够自动记住位置的,但是加了Header就不行。这里我没研究源码了,自己做了一下估计:

因为当关闭Cursor或把adapter的Cursor置为null的时候,ListView会刷新Item。如果一个Item都没有,应该哪里就返回了。然后ListView记录的当前位置还是没改变。但是如果有一个Header View,,那么就相当于有一个Item, List View会把当前位置设为Header View的位置,这样当这个界面数据切换时就总是会回滚到List View的最顶端了。

最后去掉了原来逻辑里的关闭Cursor的代码,问题解决。

你可能感兴趣的:(Android,Develop)