ListView恢复位置

    xiaoxiao2026-01-13  0

    前段时间实现了一个在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的位置。

    转载请注明原文地址: https://ju.6miu.com/read-1305970.html
    最新回复(0)