ListView在屏幕方向改变后如何保持滚动位置?

4
我有一个Activity,其中包含一个ListView。 我使用SimpleCursorAdapter填充列表视图。 当我运行应用程序时,我可以手动滚动ListView(例如到第10项)。 然后当我旋转手机-这会销毁并重新创建我的Activity,并且ListView按预期重新生成。
但是,在我的手机上旋转后,重新创建的Activity显示我的ListView仍然在我的手动滚动位置(在此示例中为第10行)。 我非常确定我的代码没有调用ListView.setSelection(int),那么是什么导致了ListView的重新定位?
这可能看起来很方便,但不是我想要的。 这是否是ListViews的行为? 如果是,则如何停止/覆盖此重新定位?
3个回答

4

进一步阅读该主题......

视图状态会自动保存(包括我的ListView)。这是由onSaveInstanceState() / onRestoreInstanceState()的默认实现处理的。通过调试器,我可以看到savedInstanceState包含了来自我的ListView的一个条目 - 所以这就是自动重新定位它的原因。为了在我的Activity中停止这个过程,我只需覆盖onSaveInstanceState()方法即可。


0

你在你的活动中使用了ListActivity作为基类吗?如果是的话,那么它很可能会覆盖onRestoreInstanceState特性。我建议尝试继承自简单的Activity。


不,我只有一个标准的Activity,而不是ListActivity。 - MickeyR
然后我会尝试在Activity.onCreate和/或Activity.onRestoreInstanceState中使用setSelection。 - slkorolev
我认为你是正确的,ListView状态会自动保存在onSaveInstanceState / onRestoreInstanceState中。 - MickeyR

0

ListView 在屏幕旋转后恢复其状态(包括滚动位置)的方式和原因与例如 EditText 保留您在其中键入的文本的方式相同。这是 Android 框架的设计方式。您可以通过在 xml 布局文件中为 ListView 设置 android:saveEnabled="false" 属性来停止此保存/恢复行为。或者,您可以调用 setSaveEnabled(false) 方法来实现相同的目的。


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