如何在返回到一个Activity时保留Android ListView的滚动位置?

13

可能是重复问题:
返回ListView时保留/保存/恢复滚动位置

用户查看一个项目列表,然后进入一个显示某个项目详细信息的活动,接着点击返回按钮回到列表活动,但我希望列表能够反映先前的滚动位置。

我应该在 onPause 中将滚动位置存储为活动的成员变量,还是有更好的方法?

1个回答

17

在onPause中将位置保存到一个实例变量中,在onResume中检查是否有位置值并移动到该位置。

例如,使用

private int currentPostion;

然后在onResume中执行..

getListView().setSelection(currentPosition);

5
您还应该考虑将此值放入传递给 onSaveInstanceState()Bundle 中,并在 onRestoreInstanceState() 中使用它,以便您可以处理屏幕方向的更改。 - CommonsWare
2
这将无法保留精确的滚动位置。 - Sver
不确定你的意思,Sver。在多个列表上,它对我来说都很好用。除非你指的是像素完美的滚动位置。 - Manfred Moser
我非常确定这就是Sver的意思,Manfred。你的方法只会滚动到帖子的顶部边缘。大多数应用程序(例如Google+)使用更专业的方法来恢复位置,这是CommonsWare解释过的。 - Lesik2008
标记备注仅是为了避免暂停、屏幕旋转等问题,并且当然也是一个好习惯,但这是一个与问题无关的话题。 - Manfred Moser
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接