smi*_*324 10 android cursor android-listview android-support-library
在Honeycomb中,Loader API被引入作为通过在后台线程上进行繁重工作来向应用程序提供数据的正确方法.在我的应用程序中,我正在努力将所有Cursors 替换为Loader返回Cursors的s.由于Cursor.requery()现在已经折旧,因此建议只调用restartLoader并允许在后台线程上再次完成工作,然后再changeCursor返回onLoadFinished.
所有这一切都非常有效,除了当我想重新查询数据时ListView没有维护它的滚动位置,使用Cursor.requery()它来工作,因为它是与更新数据相同的Cursor实例.
如何在不丢失滚动位置的情况下刷新Loader?
在Loader本身类不知道当这些数据的变化,是具体实施CursorLoader目前.现在在我的应用程序中,我需要刷新的数据是在本地SQLite数据库(没有ContentProvider)内,因此我必须修改它CursorLoader以使用我的本地数据库,正如Dianne Hackborne在开发人员组中提到的那样.
不幸的是,只是从loadInBackground返回一个Cursor,不允许在ContentObserver数据发生变化时正确地通知Loader,这是因为AbstractCursor只有在Cursor上调用notifyChanged()时才会调用requery().
由于ContentObserver永远不会通知Loader数据已经改变,我最终会Loader.onContentChanged()根据需要调用自己.在这一点上,它似乎一切正常,但如果出现任何重大问题,我会更新这个答案.
| 归档时间: |
|
| 查看次数: |
1784 次 |
| 最近记录: |