【问题标题】:What is causing ListView to maintain its scroll-position after orientation change?是什么导致 ListView 在方向更改后保持其滚动位置?
【发布时间】:2011-12-02 13:30:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: android listview orientation-changes scroll-position


    【解决方案1】:

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

    【讨论】:

    • 不,我只有一个标准 Activity 而不是 ListActivity。
    • 然后我会在 Activity.onCreate 和/或 Activity.onRestoreInstanceState 中尝试 setSelection
    • 我想你是对的,ListView 的状态是由 onSaveInstanceState / onRestoreInstanceState 自动设置的。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-10-14
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 2018-07-06
        相关资源
        最近更新 更多