4

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

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

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

4

3 回答 3

4

围绕这个主题阅读更多......

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

于 2011-10-07T07:37:35.070 回答
0

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

于 2011-10-06T20:31:40.030 回答
0

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

于 2015-09-06T17:27:27.793 回答