返回到 ListView 时保持/保存/恢复滚动位置 [英] Maintain/Save/Restore scroll position when returning to a ListView

查看:26
本文介绍了返回到 ListView 时保持/保存/恢复滚动位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个很长的 ListView,用户可以在返回上一屏幕之前滚动它.当用户再次打开此 ListView 时,我希望将列表滚动到与以前相同的点.关于如何实现这一目标的任何想法?

I have a long ListView that the user can scroll around before returning to the previous screen. When the user opens this ListView again, I want the list to be scrolled to the same point that it was previously. Any ideas on how to achieve this?

推荐答案

试试这个:

// 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() 返回顶部可见的列表项.但是这个item可能会被部分滚动到视图之外,如果你想恢复列表的确切滚动位置,你需要得到这个偏移量.所以 ListView.getChildAt(0) 返回顶部列表项的 View,然后 View.getTop() - mList.getPaddingTop()返回它与 ListView 顶部的相对偏移量.然后,为了恢复 ListView 的滚动位置,我们调用 ListView.setSelectionFromTop() 与我们想​​要的项目的索引和偏移量来定位它的顶部边缘从ListView 的顶部.

Explanation:

ListView.getFirstVisiblePosition() returns the top visible list item. But this item may be partially scrolled out of view, and if you want to restore the exact scroll position of the list you need to get this offset. So ListView.getChildAt(0) returns the View for the top list item, and then View.getTop() - mList.getPaddingTop() returns its relative offset from the top of the ListView. Then, to restore the ListView's scroll position, we call ListView.setSelectionFromTop() with the index of the item we want and an offset to position its top edge from the top of the ListView.

这篇关于返回到 ListView 时保持/保存/恢复滚动位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆