是什么导致ListView在方向改变后保持其滚动位置?

时间:2011-10-06 20:25:11

标签: android listview orientation-changes scroll-position

我有一个包含ListView的Activity。我使用SimpleCursorAdapter填充列表视图。当我运行应用程序时,我可以在ListView中手动向下滚动(例如,到第10项)。然后,当我旋转手机时 - 这会破坏并重新创建我的Activity,并按预期重新制作ListView。

但是,在旋转后我的手机上,重新创建的Activity显示我的ListView仍然在我的手动滚动位置(在这个例子中,第10行)。我很确定我的代码没有调用ListView.setSelection(int)那么是什么导致了ListView的这种重新定位?

这可能看起来很方便,但它不是我想要的。它是ListViews行为的一部分吗?如果是这样,如何停止/覆盖这种重新定位?

3 个答案:

答案 0 :(得分:4)

再读一下这个话题......

自动存储视图状态(包括我的ListView)。这由onSaveInstanceState()/ onRestoreInstanceState()的默认实现处理。使用调试器我可以看到savedInstanceState包含了我的ListView中的一个条目 - 这就是自动重新定位它的内容。要在我的Activity中停止它,我可以覆盖onSaveInstanceState()。

答案 1 :(得分:0)

您是否将ListActivity用作活动的基类?如果是,则可能是该功能覆盖onRestoreInstanceState。我会尝试继承简单的Activity。

答案 2 :(得分:0)

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