2011-10-06 43 views
4

我有一个活动包含一个ListView。我使用SimpleCursorAdapter填充列表视图。当我运行应用程序时,我可以在ListView中手动向下滚动(例如,到第10项)。然后,当我旋转我的手机 - 这会破坏并重新创建我的Activity,并且ListView会按照预期重新制作。导致ListView在方向更改后保持其滚动位置的原因是什么?

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

这似乎很方便,但它不是我想要的。它是ListViews行为的一部分吗?如果是这样,如何停止/重写此重新定位?

回答

0

您是否使用ListActivity作为您的活动的基类?如果是,那么很可能是因为它覆盖了RESTOREInstanceState。我会尝试从简单的活动继承。

+0

不,我只是有一个标准的活动不是ListActivity。 – MickeyR

+0

然后我会尝试setSelection在Activity.onCreate和/或在Activity.onRestoreInstanceState – slkorolev

+0

我认为你是正确的,ListView的状态是由onSaveInstanceState/onRestoreInstanceState设置的automaticaly。 – MickeyR

4

围绕主题的更多一些阅读....

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

0

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

相关问题