ListView恢复位置

前段时间实现了一个在ListView里面切换tab的功能,两个tab显示的数据的数据对象一样,只是数据类型不一样,两个tab共用了一个ListView对象和一个Adapter对象。(由于历史原因没有实现两个Fragment, 在每个Fragment中单独实现一个ListView) 在切换tab的时候需要恢复ListView在该tab中上一次的位置。对实现的过程进行了一个简单的总结。在介绍实现过程之前先介绍一下几个相关的API:

1) public void scrollTo(int x, int y):
设置View的滑动位置。更直观的描述是,调用该方法的View,使他的(x, y)点与视图位置的(0, 0)对齐,注意调用该方法后,View的布局位置不会改变。

2) public void scrollBy(int dx, int dy):
使View在X、Y方向上各移动dx、dy距离,
dx>0表示View从右向左滑动;反之,从左向右滑动;
dy>0表示View从下向上滑动;反之,从上向下滑动

3) public void setSelection(int position):
将列表移动到指定的位置,即移动后列表可见的第一条的位置是position。

4) public void smoothScrollToPosition(int position):
将列表平滑的移动到指定的位置,并且在移动的过程中显示指示位置。

5) public void setSelectionFromTop(int position, int y):
将列表移动到指定的位置,而且使该Item的Y轴偏移量为y。其实,
setSelection(int position)内部调用的是setSelectionFromTop(position, 0)。

了解了这几个API后,再恢复ListView的原位置就比较简单了,方法如下:
1.在ListView的onScrollStateChanged()回调方法中,调用listView.getFirstVisiblePosition()保存下来当前选中Item的position,以及调用listView.getChildAt(0).getTop()保存下来当前选中Item的Y轴偏移量y。
2.在切换Tab后,调用listView.setSelectionFromTop(position, y) (position, y是在上一次在该tab中保存的位置)方法,恢复ListView的位置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值