gpt4 book ai didi

android - 使用新的 Loader API 时如何保持 ListView 的位置?

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

在 hive 中 Loader引入 API 作为通过在后台线程上完成繁重工作来向应用程序提供数据的正确方法。在我的应用程序中,我正在努力将所有 Cursor 替换为返回 CursorLoader。由于 Cursor.requery() 现在已弃用,建议只调用 restartLoader 并允许工作再次在后台线程上完成,然后 changeCursor 当它在 onLoadFinished 中返回时。

所有这些都非常有效,除了当我想重新查询数据时 ListView 不保持它的滚动位置,使用 Cursor.requery() 这曾经有效,因为它是同一个 Cursor具有更新数据的实例。

如何在不丢失滚动位置的情况下刷新加载程序?

最佳答案

Loader 类本身并不知道数据集何时更改,并且目前是特定于 CursorLoader 的实现。现在在我的应用程序中,我需要刷新的数据位于本地 SQLite 数据库(无 ContentProvider)中,因此我不得不修改 CursorLoader 以使用我的本地数据库,正如 Dianne Hackborne 在 developer group 中提到的那样.

不幸的是,仅从 loadInBackground 返回 Cursor 不允许 ContentObserver 在数据更改时正确通知 Loader,这是因为 AbstractCursor 仅调用 notifyChanged () 当在 Cursor 上调用 requery() 时。

由于 ContentObserver 永远不会通知 Loader 数据已更改,因此我最终根据需要自行调用了 Loader.onContentChanged() .此时一切似乎都在工作,但如果出现任何重大问题,我会更新此答案。

关于android - 使用新的 Loader API 时如何保持 ListView 的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218191/

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