我有一个很长的 ListView
,用户可以在返回到上一个屏幕之前滚动它。当用户再次打开此 ListView
时,我希望列表滚动到与之前相同的位置。关于如何实现这一目标的任何想法?
最佳答案
试试这个:
// save index and top position
int index = mList.getFirstVisiblePosition();
View v = mList.getChildAt(0);
int top = (v == null) ? 0 : (v.getTop() - mList.getPaddingTop());
// ...
// restore index and position
mList.setSelectionFromTop(index, top);
解释:
ListView.getFirstVisiblePosition()
返回顶部可见列表项。但是这个项目可能会部分滚动到 View 之外,如果你想恢复列表的确切滚动位置你需要得到这个偏移量。所以 ListView.getChildAt(0)
返回顶部列表项的 View
,然后是 View.getTop() - mList.getPaddingTop()
返回其相对于 ListView
顶部的偏移量。然后,为了恢复 ListView
的滚动位置,我们调用 ListView.setSelectionFromTop()
并使用我们想要的项目的索引和一个偏移量来定位其顶部边缘与ListView
的顶部。
关于android - 返回 ListView 时保持/保存/恢复滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8149301/