gpt4 book ai didi

android - 更新 SimpleCursorAdapter,同时保持 ListView 中的滚动位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:54 27 4
gpt4 key购买 nike

我的问题:每当我通过其(定制的)SimpleCursorAdapter 更新其内容时,我的 ListView 会将其滚动位置重置为顶部。我希望 ListView 在更新时保持其滚动位置。

我开始时每次都创建一个新的适配器实例并使用 ListView.setAdapter(),但根据 this discussion我应该更新适配器而不是重置它。我找不到为 SimpleCursorAdapter 正常工作的方法。

以下是我尝试过的一些方法,省略了方法参数:
- 使用新光标的 SimpleCursorAdapter.changeCursorAndColumns() 成功更新了适配器,但仍会重置滚动位置。
- SimpleCursorAdapter.changeCursor() 以同样的方式工作。
- SimpleCursorAdapter.swapCursor() 在 api 11 之前不可用,我正在为 api 8 开发。
- SimpleCursorAdapter.notifyDataSetChanged() 不更新 ListView。 (也许我还漏掉了另一个步骤。)
- ListView.invalidate() 不更新 ListView。
- SimpleCursorAdapter.requery() 使 ListView 变为空白,并且已弃用。
- 我熟悉 ListView.setSelection() 解决方案,但我不希望我的 ListView 在更新时移动。这会将其捕捉到列表中的某个位置。

这看起来应该是一个普遍而简单的问题。有人处理过吗?

最佳答案

我遇到过类似的问题:只要光标内容发生变化,我的 CursorAdapter 就会重置滚动位置。

我没有意识到每次数据更改时我实际上都设置了一个新的列表适配器。我认为光标本身会通知适配器有关其内容的更改,但在我的情况下,是 ContentProvider 在我的 ListFragment 中触发 LoaderManager.LoaderCallbacks.onLoadFinished()。在该回调中,我现在使用 CursorAdapter.changeCursor() 而不是创建新的适配器,一切正常。

我希望这有助于解决您的问题。

关于android - 更新 SimpleCursorAdapter,同时保持 ListView 中的滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9255858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com