android - 返回 ListView 时保持/保存/恢复滚动位置

标签 android android-listview scroll scroll-position

我有一个很长的 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/

相关文章:

ListView 中的Android多行项目

python - 使用鼠标滚轮和箭头键滚动 `wx.ScrolledPanel`

android - 如何检测来自 Android 设备的传入和传出电子邮件?

android - 如何使用 adb shell 输入输入符号?

android - 如何设置 Wearable ListView 项目高度

android - 图像不适合 QuickContactBadge

android - CSS Android 设备垂直滚动时文本水平移动

ios - 使用 ionic 框架在 iPad 中拖放问题

android - 将字符串传递给 webview 并显示

java - Android:toString() 方法无法与自定义适配器一起正常工作?