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的代码,问题解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值