我的项目使用SQLiteCursorLoader library from commonsguy将数据从数据库加载到ListView中。其中的数据是一个简单的布尔值(就SQLite支持布尔值而言......也就是说,只有0或1的数字)告诉复选框的状态。如果我更改列表中复选框的状态,然后滚动列表中的项目,则列表项将返回到传入游标时的状态,尽管底层数据库已更改。如果我更改了一堆复选框的状态,然后激活列表MultiChoiceMode
,则显示的所有项目将恢复到光标最初传入时的状态,尽管事实是底层数据库已经改变。
有没有办法刷新光标? Cursor.requery()
已被弃用,每次选中复选框时,我都不想创建新的Cursor
,这种情况会发生很多。我还不确定如何在性能方面多次调用restartLoader()
,尤其是因为我使用onLoadFinish()
来执行某些动画。
答案 0 :(得分:0)
有没有办法刷新光标?
致电restartLoader()
让它重新加载数据。
我不希望每次选中复选框时都要创建一个新的Cursor,这种情况很多发生
正确使用,ListView
为您维护已检查状态。您可以通过实施android:choiceMode="multipleChoice"
的{{1}}和行Views
执行此操作。目标是在用户表明他们通过一种或另一种方式(例如,“保存”操作栏项目)完成了检查清单之前不修改数据库。
我也不确定如何多次调用restartLoader(),性能方面,特别是因为我使用onLoadFinish()来执行一些动画。
不要多次打电话。理想情况下,通过不更新数据库直到用户完成调用它为零,此时您可能正在转换到UI的其他部分。或者,每个请求的数据库I / O只调用一次(例如,在单击“保存”时)。或者,从使用Checkable
切换到其他内容,例如从CursorAdapter
填充的一组POJO上的ArrayAdapter
,以便内存中的表示形式除了可以修改单独坚持。