Android 从SQLiteCursorLoader刷新光标

Android 从SQLiteCursorLoader刷新光标,android,sqlite,android-4.0-ice-cream-sandwich,sqliteopenhelper,Android,Sqlite,Android 4.0 Ice Cream Sandwich,Sqliteopenhelper,我的项目使用将数据从数据库加载到ListView中。在这些数据中,有一个简单的布尔值(只要SQLite支持布尔值,即一个仅为0或1的数字),它告诉复选框的状态。如果更改列表中复选框的状态,然后将该项从列表中滚动,则列表项将返回到传入光标时的状态,尽管基础数据库已更改。如果我更改一组复选框的状态,然后激活列表的多选模式,则显示的所有项目都将恢复到最初传入光标时的状态,尽管基础数据库已更改 有办法刷新光标吗Cursor.requery()已被弃用,我不想每次选中复选框时都创建一个新的Cursor,这

我的项目使用将数据从数据库加载到ListView中。在这些数据中,有一个简单的布尔值(只要SQLite支持布尔值,即一个仅为0或1的数字),它告诉复选框的状态。如果更改列表中复选框的状态,然后将该项从列表中滚动,则列表项将返回到传入光标时的状态,尽管基础数据库已更改。如果我更改一组复选框的状态,然后激活列表的
多选模式
,则显示的所有项目都将恢复到最初传入光标时的状态,尽管基础数据库已更改

有办法刷新光标吗
Cursor.requery()
已被弃用,我不想每次选中复选框时都创建一个新的
Cursor
,这种情况经常发生。我也不确定多次调用
restartLoader()
会如何工作,尤其是因为我使用
onLoadFinish()
来执行一些动画

有办法刷新光标吗

调用
restartLoader()
,让它重新加载数据

我不希望每次选中复选框时都必须创建一个新的光标,这种情况经常发生

如果使用得当,
ListView
会为您保持选中状态。您可以通过android:choiceMode=“multipleechoice”和实现
可检查的
视图来实现这一点。这样做的目的是,在用户表示他们已经通过某种方式(例如,“保存”操作栏项)弄乱了检查表之前,不要修改数据库

我也不确定多次调用restartLoader()会如何工作,特别是因为我使用onLoadFinish()来执行一些动画


不要叫它几次。理想情况下,零次调用它,在用户完成之前不更新数据库,此时您可能正在转换到UI的其他部分。或者,每个请求的数据库I/O只调用它一次(例如,在单击“保存”时)。或者,从使用
CursorAdapter
切换到其他方式,例如对从
Cursor
填充的一组POJO使用
ArrayAdapter
,这样除了可以单独持久化外,内存中的表示形式还可以修改。

虽然我承认这通常是一个很好的建议,在我的特殊情况下,这些建议对我没有帮助。我的应用程序是一个银行分类账,它使用一个关系数据库来跟踪所有重要数据,包括用户是否勾选了一个项目以将交易标记为已过账。列表视图具有属性
android:choiceMode=“multipleechoicemodal”
,因此用户可以激活
ActionMode
从数据库中一次删除多个项目。如果你愿意,你可以在这里查看来源:@MowDownJoe:“这对我的特殊情况没有帮助”——然后你需要改变你的情况。您要么需要重新查询光标,要么停止使用CursorAdapter,不管您喜欢与否。